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