Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Plotting with dotted lines solved (Re: plotting with dotted lines, not dashed)

39 views
Skip to first unread message

Robert Rosenbaum

unread,
Nov 3, 2009, 2:56:44 AM11/3/09
to
I put together a way to make proper dotted plots. Thanks to everyone
for the help, especially to Maxim whose e-mail helped me put together
the solution below.

Just to review the issue:
- The PlotStyle option Dotted or Dashing[{0,r}] makes small
(rectangular) dashes as opposed to circular dots. This appears to be
contrary to what the help file in 7.0.1 claims.
- Using ListPlot or using the Mesh and MeshStyle option in Plot
produce unevenly spaced dots.


To produce a proper dotted plot, I defined the following function:
DotPlot[f_, x_, xrange_, yrange_, aspratio_, npts_, ptsize_, style_,
opts_] :=
Plot[f, {x, xrange[[1]], xrange[[2]]}, PlotRange -> {xrange, yrange},
Mesh -> npts,
MeshStyle -> Append[style, AbsolutePointSize[ptsize]],
PlotStyle -> None, AspectRatio -> aspratio,
MeshFunctions ->
Function[{u, v},
Sqrt[( u/(xrange[[2]] - xrange[[1]]))^2 +
aspratio^2 (v/(yrange[[2]] - yrange[[1]]))^2]], opts]


The arguments should be self-explanatory. For example, try
DotPlot[x/(1 + x), x, {0, 25}, {0, 1}, 1/GoldenRatio, 25, 5, {Blue}, {}]

Now compare the plot above to:
Plot[x/(1 + x), {x, 0, 25}, PlotStyle -> {Thick, Dotted},
PlotRange -> {0, 1}]

or:
ListPlot[Table[{x, x/(1 + x)}, {x, 0, 25}],
PlotStyle -> {Blue, AbsolutePointSize[5]}, PlotRange -> {0, 1}]


The function DotPlot could be improved on, for example, if one could
access PlotRange and AspectRatio inside the call to Plot (so that
Automatic options could be used). How would one access the local
value of PlotRange or AspectRatio within a call to Plot? I'm sure
there's a way.

On Oct 28, 2009, at 4:08 AM, Robert Rosenbaum wrote:

> I need to plot a function with a dotted line for a figure to be
> published. As you may know PlotStyle->Dotted simply makes a dashed
> line with small dashes. Since I already have a dashed line in the
> figure, I would prefer an actual dotted line for this function.
>
> I tried ListPlot with PlotMarkers set to discs, but these get spaced
> according to the grid in the list I send to ListPlot. In order to
> space them equally like Dashed does, I'd have to make a non-uniform
> grid that depends on the derivative of my function (which I don't have
> a closed form for).
>
> Surely there is a reasonable way to plot with a dotted line, right?
> Any ideas?
>
>
> Best,
> Robert
>
>
>
>
>
>


Best,
Robert


DrMajorBob

unread,
Nov 10, 2009, 6:09:43 AM11/10/09
to
This makes an inferior plot to yours, but it does access the "local"
PlotRange and AspectRatio (if I understand what that means):

DotPlot[f_, x_, xrange_, yrange_, aspratio_, npts_, ptsize_, style_,
opts_] :=

With[{p =
Plot[f, {x, xrange[[1]], xrange[[2]]}, Mesh -> npts,


MeshStyle -> Append[style, AbsolutePointSize[ptsize]],
PlotStyle -> None,

MeshFunctions ->
Function[{u, v},

Sqrt[(u/(xrange[[2]] - xrange[[1]]))^2 +
aspratio^2 (v/(yrange[[2]] - yrange[[1]]))^2]], opts]},
Print@AbsoluteOptions[p, {PlotRange, AspectRatio}];
p
]

DotPlot[x/(1 + x), x, {0, 25}, {0, 1},
1/GoldenRatio, 25, 5, {Blue}, {}]

{PlotRange->{{0.,25.},{0.596575,0.961538}},AspectRatio->0.618034}

I'm not sure what you planned to do with that information, however.

Bobby

On Tue, 03 Nov 2009 01:55:42 -0600, Robert Rosenbaum <rob...@math.uh.edu>
wrote:


--
DrMaj...@yahoo.com

0 new messages