Extracting data points from Plot[]
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg773] Extracting data points from Plot[]
- From: j-guyer at nwu.edu (Jon Guyer)
- Date: Thu, 13 Apr 1995 14:10:52 -0500
- Organization: Northwestern University, Evanston, IL
The Plot[] function does some intelligent picking of points, such that it
usually does a pretty good job of following twists and turns in a function
without plotting an excessive number of points. I'm not ecstatic about
using Mma for final output, though, so I like to export these curves to a
graphing program.
So far, I haven't been able to figure out any way to get at this
point-picking algorithm without using Plot[]. What I'm then left with is
doing:
In[1]:= Plot[{x,x^2},{x,0,2}];
In[2]:= InputForm[%1][[1]][[1]][[1]][[1]][[1]][[1]]
Out[2]= {{0., 0.}, {0.0833333, 0.0833333}, {0.166667, 0.166667},
> {0.25, 0.25}, {0.333333, 0.333333}, {0.416667, 0.416667}, {0.5, 0.5},
> {0.583333, 0.583333}, {0.666667, 0.666667}, {0.75, 0.75},
> {0.833333, 0.833333}, {0.916667, 0.916667}, {1., 1.},
> {1.08333, 1.08333}, {1.16667, 1.16667}, {1.25, 1.25},
> {1.33333, 1.33333}, {1.41667, 1.41667}, {1.5, 1.5}, {1.58333, 1.58333},
> {1.66667, 1.66667}, {1.75, 1.75}, {1.83333, 1.83333},
> {1.91667, 1.91667}, {2., 2.}}
In[3]:= InputForm[%1][[1]][[1]][[2]][[1]][[1]][[1]]
-6
Out[3]= {{0., 0.}, {0.00260417, 6.78168 10 }, {0.00520833, 0.0000271267},
> {0.0078125, 0.0000610352}, {0.0104167, 0.000108507},
> {0.0130208, 0.000169542}, {0.015625, 0.000244141},
> {0.0208333, 0.000434028}, {0.0260417, 0.000678168},
> {0.03125, 0.000976562}, {0.0416667, 0.00173611},
> {0.0520833, 0.00271267}, {0.0625, 0.00390625}, {0.0833333, 0.00694444},
> {0.104167, 0.0108507}, {0.125, 0.015625}, {0.166667, 0.0277778},
> {0.208333, 0.0434028}, {0.25, 0.0625}, {0.333333, 0.111111},
> {0.416667, 0.173611}, {0.5, 0.25}, {0.583333, 0.340278},
> {0.666667, 0.444444}, {0.75, 0.5625}, {0.833333, 0.694444},
> {0.916667, 0.840278}, {1., 1.}, {1.08333, 1.17361}, {1.16667, 1.36111},
> {1.25, 1.5625}, {1.33333, 1.77778}, {1.41667, 2.00694}, {1.5, 2.25},
> {1.58333, 2.50694}, {1.66667, 2.77778}, {1.75, 3.0625},
> {1.83333, 3.36111}, {1.91667, 3.67361}, {2., 4.}}
I can then export this to a useably formatted text file of data with an
arcane little macro I got from somebody.
What I'm wondering, though, is if there isn't something a bit more
straightforward than "InputForm[%1][[1]][[1]][[2]][[1]][[1]][[1]]" to get
at the data points? Is there a way to generate these data series the way
Plot[] does, without using Plot (which necessitates stripping off the
"Graphics" and "Line" structures which make up the bulk of the
sub-sub-sub-arrays that I'm referencing).
Am I being obtuse?
--
Jonathan E. Guyer j-guyer at nwu.edu