This is what I believe the situation to be. AbsoluteOptions
uses FullAxes
under the hood. It turns out that FullAxes
is still expecting Frame
/FrameLabel
options to be specified using the old Frame -> {b, l, t, r}
syntax instead of the new Frame->{{l, r}, {b, t}}
syntax. This is why FullAxes
issues messages and doesn't work. This means the solution is simply to fix these options before running AbsoluteOptions
/FullAxes
on the graphic.
(update to fix PlotRange as well)
It turns out that the function PlotRange also has an issue with some "malformed" plot ranges, so I updated the code to handle that as well.
Here is a method of doing sothe revised code:
Begin["FullAxesDump`"];
With[{graphic = ListLogPlot[{10, 100}]},
If[Quiet @ TrueQ @ Check[FullAxes @ ListPlot[{0,1000}]graphic, True],
Unprotect[FullAxes];
FullAxes[arg_] /; !TrueQ@$FACheck := Block[{$FACheck = TrueFACheck=True},
FullAxes[fixOptions@arg]
];
Protect[FullAxes];
fixOptions[x_]:=x;]
]
With[{graphic = Graphics[{}, GridLines->None, fixOptions[(tag:Graphics3D|Graphics)[g_PlotRange->{{0, opts__]]1}, :={All, tag[All}}]},
If[Quiet @ TrueQ @ gCheck[PlotRange[graphic], True],
SequenceUnprotect[PlotRange];
@@ ReplaceAll[ PlotRange[arg_] /; !TrueQ@$FACheck := Block[{$FACheck=True},
{opts,PlotRange[fixOptions[arg]]
Frame->False, Axes->False}, ];
Protect[PlotRange];
Rule[h]
]
fixOptions[x_]:Frame|FrameTicks=x
fixOptions[(tag:Graphics3D|Graphics)[g_, rhs_]opts__]] :>= htag[
-> fixRule[rhs] g,
Sequence@@ReplaceAll[
] {opts},
]; Rule[h:Frame|FrameTicks|PlotRange,rhs_] :> h->fixRule[h,rhs]
],
fixRule[Frame->False, Axes->False
]
fixRule[Frame|FrameTicks, {{l_, r_}, {b_, t_}}] := {b, l, t, r};
fixRule[Frame|FrameTicks, fixRule[{d_, s_}] := {d, Automatic, s, Automatic};
fixRule[PlotRange, a_List] := Replace[a, fixRule[rhs_]{All, :=All}->All, rhs;
{1}]
fixRule[_,rhs_]:=rhs
End[];