|
From: Richard L. <la...@un...> - 2013-12-08 13:49:41
|
I have a file of x,y real data pairs with the values to 9 digits of precision. When I use gnuplot to plot the data directly using, say: plot 'HHAT3260.csv' using 2:1 I get a detailed plot with the values at their original precision. However, when I use gnuplot within Python (having read in the file to float lists x and y) using: g = Gnuplot.Gnuplot(debug=1) d = Gnuplot.Data(x, y, with_='points') g.plot(d) I get a plot with plotted values rounded or truncated to 7 digits of precision, it seems. Is there a way to preserve the precision of the data when using py-gnuplot? -- Richard Langley ----------------------------------------------------------------------------- | Richard B. Langley E-mail: la...@un... | | Geodetic Research Laboratory Web: http://gge.unb.ca | | Dept. of Geodesy and Geomatics Engineering Phone: +1 506 453-5142 | | University of New Brunswick Fax: +1 506 453-4943 | | Fredericton, N.B., Canada E3B 5A3 | | Fredericton? Where's that? See: http://www.fredericton.ca/ | ----------------------------------------------------------------------------- |
|
From: Michael H. <mh...@al...> - 2013-12-09 07:47:18
|
On 12/08/2013 02:49 PM, Richard Langley wrote:
> I have a file of x,y real data pairs with the values to 9 digits of
> precision. When I use gnuplot to plot the data directly using, say:
> plot 'HHAT3260.csv' using 2:1
> I get a detailed plot with the values at their original precision.
> However, when I use gnuplot within Python (having read in the file to
> float lists x and y) using:
> g = Gnuplot.Gnuplot(debug=1)
> d = Gnuplot.Data(x, y, with_='points')
> g.plot(d)
> I get a plot with plotted values rounded or truncated to 7 digits of
> precision, it seems. Is there a way to preserve the precision of the
> data when using py-gnuplot?
Gnuplot.py's default is to treat data as 32-bit floating point numbers.
But if you explicitly pass double-precision data to Gnuplot.Data(),
then I think it will pass the data to gnuplot with the higher precision.
I.e., do something like
d = Gnuplot.Data(
numpy.array(x, dtype=numpy.float64),
numpy.array(y, dtype=numpy.float64),
with_='points',
)
Michael
--
Michael Haggerty
mh...@al...
http://softwareswirl.blogspot.com/
|
|
From: Richard B. L. <la...@un...> - 2013-12-09 14:40:59
|
Thanks, Michael, but, sadly, that did not work. -- Richard On Monday, December 9, 2013,343, at 3:47 AM, Michael Haggerty wrote: > On 12/08/2013 02:49 PM, Richard Langley wrote: >> I have a file of x,y real data pairs with the values to 9 digits of >> precision. When I use gnuplot to plot the data directly using, say: >> plot 'HHAT3260.csv' using 2:1 >> I get a detailed plot with the values at their original precision. >> However, when I use gnuplot within Python (having read in the file to >> float lists x and y) using: >> g = Gnuplot.Gnuplot(debug=1) >> d = Gnuplot.Data(x, y, with_='points') >> g.plot(d) >> I get a plot with plotted values rounded or truncated to 7 digits of >> precision, it seems. Is there a way to preserve the precision of the >> data when using py-gnuplot? > > Gnuplot.py's default is to treat data as 32-bit floating point numbers. > But if you explicitly pass double-precision data to Gnuplot.Data(), > then I think it will pass the data to gnuplot with the higher precision. > I.e., do something like > > d = Gnuplot.Data( > numpy.array(x, dtype=numpy.float64), > numpy.array(y, dtype=numpy.float64), > with_='points', > ) > > Michael > > -- > Michael Haggerty > mh...@al... > http://softwareswirl.blogspot.com/ ----------------------------------------------------------------------------- | Richard B. Langley E-mail: la...@un... | | Geodetic Research Laboratory Web: http://gge.unb.ca/ | | Dept. of Geodesy and Geomatics Engineering Phone: +1 506 453-5142 | | University of New Brunswick Fax: +1 506 453-4943 | | Fredericton, N.B., Canada E3B 5A3 | | Fredericton? Where's that? See: http://www.fredericton.ca/ | ----------------------------------------------------------------------------- |
|
From: Michael H. <mh...@al...> - 2013-12-09 15:09:44
|
On 12/09/2013 03:40 PM, Richard B. Langley wrote: > On Monday, December 9, 2013,343, at 3:47 AM, Michael Haggerty wrote: >> On 12/08/2013 02:49 PM, Richard Langley wrote: >>> I have a file of x,y real data pairs with the values to 9 digits of >>> precision. When I use gnuplot to plot the data directly using, say: >>> plot 'HHAT3260.csv' using 2:1 >>> I get a detailed plot with the values at their original precision. >>> However, when I use gnuplot within Python (having read in the file to >>> float lists x and y) using: >>> g = Gnuplot.Gnuplot(debug=1) >>> d = Gnuplot.Data(x, y, with_='points') >>> g.plot(d) >>> I get a plot with plotted values rounded or truncated to 7 digits of >>> precision, it seems. Is there a way to preserve the precision of the >>> data when using py-gnuplot? >> >> Gnuplot.py's default is to treat data as 32-bit floating point numbers. >> But if you explicitly pass double-precision data to Gnuplot.Data(), >> then I think it will pass the data to gnuplot with the higher precision. >> I.e., do something like >> >> d = Gnuplot.Data( >> numpy.array(x, dtype=numpy.float64), >> numpy.array(y, dtype=numpy.float64), >> with_='points', >> ) > Thanks, Michael, but, sadly, that did not work. > -- Richard Hmm, sorry, I thought I had built something like that in. If so, it would have been more then 10 years ago, so I hope you will forgive me :-) The formatting is done by the function write_array() in the file utils.py. The individual elements are formatted using '%s'. If you change that to '%r' (in two places) or '%.20g' or something like that, I think you'll get what you want. Or, of course, you can always write the data to a file yourself, similar to how PlotItems.Data() does it. Michael -- Michael Haggerty mh...@al... http://softwareswirl.blogspot.com/ |
|
From: Richard L. <la...@un...> - 2013-12-10 03:46:02
|
Michael: Neither of those suggestions seemed to work. However, in the float_array function in utils.py, simply changing "return numpy.asarray(m, numpy.float32)" to "return numpy.asarray(m, numpy.float64)" did the trick for me. I have another question, but I'll ask it in a separate e-mail. -- Richard ----------------------------------------------------------------------------- | Richard B. Langley E-mail: la...@un... | | Geodetic Research Laboratory Web: http://gge.unb.ca | | Dept. of Geodesy and Geomatics Engineering Phone: +1 506 453-5142 | | University of New Brunswick Fax: +1 506 453-4943 | | Fredericton, N.B., Canada E3B 5A3 | | Fredericton? Where's that? See: http://www.fredericton.ca/ | ----------------------------------------------------------------------------- ________________________________________ From: Michael Haggerty [mh...@al...] Sent: Monday, December 09, 2013 11:09 AM To: Richard Langley Cc: gnu...@li... Subject: Re: [Gnuplot-py-users] Resolution of Plots On 12/09/2013 03:40 PM, Richard B. Langley wrote: > On Monday, December 9, 2013,343, at 3:47 AM, Michael Haggerty wrote: >> On 12/08/2013 02:49 PM, Richard Langley wrote: >>> I have a file of x,y real data pairs with the values to 9 digits of >>> precision. When I use gnuplot to plot the data directly using, say: >>> plot 'HHAT3260.csv' using 2:1 >>> I get a detailed plot with the values at their original precision. >>> However, when I use gnuplot within Python (having read in the file to >>> float lists x and y) using: >>> g = Gnuplot.Gnuplot(debug=1) >>> d = Gnuplot.Data(x, y, with_='points') >>> g.plot(d) >>> I get a plot with plotted values rounded or truncated to 7 digits of >>> precision, it seems. Is there a way to preserve the precision of the >>> data when using py-gnuplot? >> >> Gnuplot.py's default is to treat data as 32-bit floating point numbers. >> But if you explicitly pass double-precision data to Gnuplot.Data(), >> then I think it will pass the data to gnuplot with the higher precision. >> I.e., do something like >> >> d = Gnuplot.Data( >> numpy.array(x, dtype=numpy.float64), >> numpy.array(y, dtype=numpy.float64), >> with_='points', >> ) > Thanks, Michael, but, sadly, that did not work. > -- Richard Hmm, sorry, I thought I had built something like that in. If so, it would have been more then 10 years ago, so I hope you will forgive me :-) The formatting is done by the function write_array() in the file utils.py. The individual elements are formatted using '%s'. If you change that to '%r' (in two places) or '%.20g' or something like that, I think you'll get what you want. Or, of course, you can always write the data to a file yourself, similar to how PlotItems.Data() does it. Michael -- Michael Haggerty mh...@al... http://softwareswirl.blogspot.com/ |