Bug introduced in 10.0.0 and fixed in 10.0.2
Normally, you can enable Graphics3D
to show tick marks by doing this:
Graphics3D[Sphere[], Axes -> True]
But in Mathematica version 10, when I add an Inset
which contains a Grid
or Column
, the output looks wrong:
Graphics3D[Sphere[], Axes -> True,
Epilog -> Inset[Column[{"a"}], {.05, .05}]]
The ticks only appear when I manually rotate the graphics or start editing the input line. But note that I produced the enclosed images here by doing Export["file.png",%]
after each plot, so that this faulty display is indeed not just a notebook display problem - it leads to incorrectly exported graphics, too.
This doesn't appear to happen when the inset contains a Row
instead of Column
. I also see this strange behavior when doing something like this:
Plot3D[1, {x, -1, 1}, {y, -1, 1},
Epilog -> Inset[Column[{"a"}], {.05, .05}]]
Here, you can see that the tick marks are displayed only partially!
My operating system is Mac OS X 10.8.5, and I am wondering if this is reproducible on other systems. If so, it would be nice to know how to work around this problem. The issue also goes away when the Inset
only contains numbers and not strings.
Edit
I've reported this as a bug (CASE:1384605).
Answer
Since the bug doesn't seem to occur when the Inset
contains a Row
instead of a Column
or Grid
, one could define the following function:
Attributes[fixInsets] = {HoldFirst};
fixInsets[plot_] :=
ReleaseHold[
Hold[plot] /.
HoldPattern[Rule[Epilog, Inset[x_, y___]]] :>
Rule[Epilog, Inset[Row[{x}], y]]
]
Then use it on the faulty plots like this:
Graphics3D[Sphere[], Axes -> True,
Epilog -> Inset[Column[{"a"}], {.05, .05}]] // fixInsets
This produces the correct output. All I did was to replace the content of the Inset
(when it occurs in the Epilog
) by Row[{...}]
wrapping that content. fixInsets
doesn't modify the plot if there is no need to, and it can be appended to any 3D graphics without having to change the actual plotting commands.
Another possible work-around is to wrap the plot in Legended
. For example,
Legended[
Plot3D[1, {x, -1, 1}, {y, -1, 1}, Epilog -> Inset[Column[{"a"}]]],
""]
This empty legend is enough to make the tick marks appear again.
Comments
Post a Comment