Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I want to make a parametric plot like this:

ParametricPlot[{{2 t, -10 t^2}, {t, 2 t}}, {t, 0, 2}]

I have tried the following but it doesn't work:

ParametricPlot[{{2 t, -10 t^2}, {t, 2 t}}, {{t, 0, 2}, {t, 4, 7}}]
share|improve this question

3 Answers 3

up vote 6 down vote accepted

ConditionalExpression[] works nicely:

ParametricPlot[{ConditionalExpression[{2 t, -10 t^2}, 0 <= t <= 2], 
                ConditionalExpression[{t, 2 t}, 4 <= t <= 7]}, {t, 0, 7}, 
               AspectRatio -> 1/GoldenRatio]

split plots

share|improve this answer
    
J.M. are you back? :-D –  Mr.Wizard Apr 3 '13 at 8:56
    
Well, back... ish. –  J. M. Apr 3 '13 at 8:56
    
Thank you very much for your answer, appreciate it! –  user1626227 Apr 3 '13 at 9:14
4  
@user1626227 This is a fine answer, and perhaps the best one you are going to get, but as a rule I recommend that you leave more time before you Accept an answer. I usually wait 24 hours so that people in all time zones have a chance to read the question and respond if they choose, before the question appears concluded. –  Mr.Wizard Apr 3 '13 at 9:16

Without conditional constructs, just building a list of your functions and limits

intervals = {{{2 t, -10  t^2}, {0, 2}}, {{t, 2 t}, {4, 7}}};
Show[ParametricPlot[#[[1]], Evaluate@{t, Sequence @@ #[[2]]}] & /@  intervals,
     PlotRange -> Automatic, AspectRatio -> 1/GoldenRatio]

Mathematica graphics

Edit You may prefer to use \[FormalT] instead of simply t for protection against possible definitions of t elsewhere.

Edit 2

A more featured implementation, taking the color switching from @Mr's answer and forcing it to cycle so allowing to take any number of curves as argument:

f[{var_, l1_}] := Module[{style = ColorData[1] /@ Range@5},
  Show[ParametricPlot[#[[1]], Evaluate@{var, Sequence @@ #[[2]]}] & /@ l1 /.
       x_Line :> {First@(style = RotateRight[style]), x}, 
       PlotRange -> Automatic, AspectRatio -> 1/GoldenRatio]]

Usage:

l = {\[FormalT],Array[{{RandomInteger[10]\[FormalT],RandomInteger[{-10,10}]   
                    \[FormalT]^RandomReal[2]},RandomInteger[10,2]}&,10]};
f[l]

Mathematica graphics

share|improve this answer
    
If t is defined this fails. I think you should add a Block or at least a warning. (+1 nevertheless) –  Mr.Wizard Apr 3 '13 at 9:13
    
@Mr.Wizard Usually I use \[FormalT], but I rather prefer to keep the code clean here –  belisarius Apr 3 '13 at 9:18
    
@Mr.Wizard Updated with the warning –  belisarius Apr 3 '13 at 9:20
    
I would have used MapThread[] instead of Map[] myself... –  J. M. Apr 3 '13 at 9:41
    
@J.M. Why? I wanted the function and its associated interval clustered in one list ... –  belisarius Apr 3 '13 at 9:45

For version 7 users without ConditionalExpression there is Piecewise:

ParametricPlot[
  Piecewise[{{{2 t, -10 t^2}, 0 <= t <= 2}, {{t, 2 t}, 4 <= t <= 7}}], {t, 0, 7},
  AspectRatio -> 1/GoldenRatio
]

Mathematica graphics

To get separate styles requires additional work:

ParametricPlot[
 pwSplit @ Piecewise[{{{2 t, -10 t^2}, 0 <= t <= 2}, {{t, 2 t}, 4 <= t <= 7}}],
 {t, 0, 7},
 AspectRatio -> 1/GoldenRatio,
 PlotStyle -> {Red, Blue},
 Evaluated -> True
]

Mathematica graphics

pwSplit code from here. Or:

Module[{style = {Red, Blue}, i = 1},
 ParametricPlot[
   Piecewise[{{{2 t, -10 t^2}, 0 <= t <= 2}, {{t, 2 t}, 4 <= t <= 7}}], {t, 0, 7},
   AspectRatio -> 1/GoldenRatio
 ] /. x_Line :> {style[[i++]], x}
]

Mathematica graphics

share|improve this answer
1  
+1 How about something like x_Line :> {First@(style = RotateRight[style]), x} in your last piece of code? –  belisarius Apr 3 '13 at 9:29
    
@belisarius that's a good suggestion if one wishes for cyclic behavior. R.M would be pleased. You could also use Mod. –  Mr.Wizard Apr 3 '13 at 9:34

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.