Re: Adding identification marks to a Plot
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg859] Re: [mg791] Adding identification marks to a Plot
- From: Allan Hayes <hay at haystack.demon.co.uk>
- Date: Wed, 26 Apr 1995 00:26:29 -0400
In [mg791] Joseph McWilliams writes
> The program below will plot f[n,x] for k values of the parameter
n > for x in the interval [a,b], all on the same axis. Is there any
way > to place markers next to each plotted function so they can be
> distinguished from one another? Color is out, this is for a grey
> scale NeXT station.
> Show[Table[Plot[f[n,x],{x,a,b}, DisplayFunction->Identity],
> {n,1,k}], DisplayFunction -> $DisplayFunction]
Here are some ideas.
Using the program given, with
In[1]:= f[n_,x_] := Sin[n x]
and numerical values for the parameters, we get.
In[2]:= Show[Table[Plot[f[n,x],{x,0,2Pi}, DisplayFunction->Identity],
{n,1,4}],
DisplayFunction -> $DisplayFunction
]//Timing
Out[2]= {1.45 Second, -Graphics-}
Fierstly, this can be simplified and speeded up by taking the table
inside Plot, which can plot a list of functions (note the use of
Evaluate inside Plot).
In[3]:= Plot[Evaluate[Table[f[n,x],{n,1,4}]],{x,0,2Pi}]//Timing
Out[3]= {0.583333 Second, -Graphics-}
Now for distinguishing marks: I give three attempts. Many
variations are possible. Special cases are not dealt with eg. a
point lying on the x-axis or points not included in the plot range.
(1) put marks on the graphs; gray-out the graphs to show up the marks.
In[4]:= Plot[Evaluate[Table[f[n,x],{n,1,4}]],{x,0,2Pi},
Epilog ->
Table[Text[n,{#,f[n,#]}&[Pi+Random[]]],{n,1,4}],
PlotStyle -> GrayLevel[.5]
]//Timing
Out[4]= {0.533333 Second, -Graphics-}
(2) put marks to the side with lines to the graphs.
In[5]:= Plot[Evaluate[Table[f[n,x],{n,1,4}]],{x,0,2Pi},
Epilog ->
Table[
{Line[{{#,f[n,#]}, {2Pi+.1,f[n,#]}}],
Text[n,{2Pi+.1,f[n,#]},{-2,0}]
}&[Pi+Random[]],
{n,1,4}],
PlotStyle -> GrayLevel[.5],
PlotRange -> {{0, 2Pi + .5}, Automatic}
(*to get numbers on plot*)
]//Timing
Out[5]= {0.616667 Second, -Graphics-}
(3) even with a grey scale system we can make some visual
distinction by using PlotStyle to set thickness, dashing and
graylevel
In[6]:= Plot[Evaluate[Table[f[n,x],{n,1,4}]],{x,0,2Pi},
Epilog :>
Table[
{ Line[{{#,f[n,#]}, {2Pi+.1,f[n,#]}}],
Text[n,{2Pi+.1,f[n,#]},{-2,0}]
}&[Pi+Random[]],
{n,1,4}
],
PlotRange -> {{0, 2Pi + .5}, Automatic},
(*to get numbers on plot*)
PlotStyle -> Table[GrayLevel[i/4],{i,0,3}]
]//Timing
Out[6]= {0.616667 Second, -Graphics-}
Finally; there is the package Graphics`Legend`, and if you want
arrows instead of lines, the package Graphics`Arrows`.
Allan Hayes
hay at haystack.demon.co.uk