Я могу предложить следующий Ticks
хак:
pl = Plot[Sin[x], {x, 0, 10}];
Reap[Rasterize[Show[pl, Ticks -> {Sow[{##}] &, Sow[{##}] &}, ImageSize -> 0],
ImageResolution -> 1]][[2, 1]]
=> {{-0.208333, 10.2083}, {-1.04167, 1.04167}}
Хитрость в том, что реальное PlotRange
определяется FrontEnd, а не ядром. Поэтому мы должны заставить FrontEnd визуализировать графику, чтобы оценить функции тиков. Этот хак дает полный PlotRange
с явным добавлением PlotRangePadding
.
Более общее решение, учитывающее возможность того, что pl
имеет нестандартное значение опции DisplayFinction
и что для опции Axes
может быть установлено значение False
:
completePlotRange[plot:(_Graphics|_Graphics3D|_Graph)] :=
Quiet@Last@
Last@Reap[
Rasterize[
Show[plot, Axes -> True, Frame -> False, Ticks -> (Sow[{##}] &),
DisplayFunction -> Identity, ImageSize -> 0], ImageResolution -> 1]]
Можно получить точное значение PlotRange
(без добавления PlotRangePadding
) с помощью следующей функции:
plotRange[plot : (_Graphics | _Graphics3D | _Graph)] :=
Quiet@Last@
Last@Reap[
Rasterize[
Show[plot, PlotRangePadding -> None, Axes -> True, Frame -> False,
Ticks -> (Sow[{##}] &), DisplayFunction -> Identity, ImageSize -> 0],
ImageResolution -> 1]]
P.S. На странице «Документация» для PlotRange
в разделе «Дополнительная информация» можно прочитать: «AbsoluteOptions
дает фактические настройки для параметров, используемых внутри Mathematica , если задано значение Automatic
или All
. "(Выделено мое). Таким образом, кажется, что Документация даже не гарантирует, что AbsoluteOptions
даст правильные значения для PlotRange
, когда это не Automatic
или All
.