# LogPlot axes labels destroyed when working in high precision

(I'm using Mathematica 8.)

I have a Taylor series:

poly = Normal[Series[E^x, {x, 0, 10}]]


I want to produce a log-linear plot of the error. This is easy enough with the following code:

LogPlot[Abs[E^x - poly], {x, -1, 1}]


This produces

Now, I want to plot even smaller values of the error (in particular I want the plot to be sensible near zero), so I tell LogPlot to use high precision as follows:

LogPlot[Abs[E^x - poly], {x, -1, 1}, WorkingPrecision -> 30]


However this destroys the labeling on the y-axis:

Does anyone know what has gone wrong here? How do I fix it?

-
No solution, just some comments: WorkingPrecision -> MachinePrecision will use machine precision (default). WorkingPrecision -> $MachinePrecision will not use machine precision, but the built-in arbitrary precision with the same number of digits as machine precision. For high precision you would not want MachinePrecision, but set a higher number in WorkingPrecision (which as you noticed produces a plot with a wrong scale). – Szabolcs Dec 3 '12 at 17:26 Setting WorkingPrecision, as in your example, crashes version 9. Can anyone reproduce this in 9? – Szabolcs Dec 3 '12 at 17:27 @Szabolcs For me it doesn't crash a session but it yields a plot of a constant function, so it is incorrect. – Artes Dec 3 '12 at 17:30 I had read "$MachinePrecision denotes arbitrary precision numbers with the same precision as machine reals, but crucially, with precision tracking switched on. This allows Plot to adaptively increase the working precision (by up to \$MaxExtraPrecision base-10 digits) in order to produce an accurate plot, whereas without precision tracking it has no way to know when numerical errors become significant." ... Anyway to avoid confusion I've just set the WorkingPrecision to 30 in the question. –  aukie Dec 3 '12 at 17:38
@Szabolcs it crashes the kernel on macosX 10.7.5 +mma 9.0 –  chris Dec 3 '12 at 19:34

This is not simply a mislabeling of the axes. More than that is going on: the plot produced is not even logarithmic. Let's try to use the default (non-log-transformed tick marks):

First, with MachinePrecision (correct result):

Show[
LogPlot[Abs[E^x - poly], {x, -1, 1}, WorkingPrecision -> MachinePrecision],
Ticks -> Automatic
]


Then with higher precision (incorrect result):

Show[
LogPlot[Abs[E^x - poly], {x, -1, 1}, WorkingPrecision -> 30],
Ticks -> Automatic
]


I don't think it's worth digging into how LogPlot works, as at this point this clearly seems to be a bug.

You can work around it by using Plot instead of LogPlot:

Plot[Log@Abs[E^x - poly], {x, -1, 1}, WorkingPrecision -> 30]


But then you have to do re-label the axes yourself (CustomTicks / LevelScheme are helpful packages). If you don't mind losing adaptive plotting, you can generate the points to be shown yourself and us ListLogPlot:

ListLogPlot[Table[Evaluate@Abs[E^x - poly], {x, -1, 1, 0.0130}]]


(You'd probably want Joined -> True here, but seeing where the points are helps you tune the plot, so I didn't include it now.)

-
Thanks If you could show how to use Plot with the CustomTicks package, that would be very useful –  aukie Dec 4 '12 at 15:14
Better yet: have Plot[] take care of the adaptive sampling, and pass the points thus generated to ListLogPlot[]`. –  Ｊ. Ｍ. May 4 at 5:36