# Export Plot3D in Mathematica 10.1 is Rasterized by default

When I use Export to export Plot3D to PDF format, I get different behaviour in Mathematica 10.1 compared to 10.0. In particular, version 10.1 Rasterizes the graphics by default:

myFigure = Plot3D[x y, {x, 0, 1}, {y, 0, 1}]
Export["Figure.pdf", myFigure]


How can I turn off this rasterization? Can I set the default back to vector images?

• Specify the file format: Export["\\Figure.pdf", myFigure, "PDF"] Jul 7, 2015 at 18:37
• @DavidG.Stork That doesn't seem to help: the PDF format is implicit from the extension in the file name. If you don't specify it and try to export a 2D plot to PDF, it will be exported as a vector graphic. On the other hand, even if you do specify it, and export a 3D plot, it will be rasterized, at least on my system (v.10.1 Win764bit). Jul 7, 2015 at 18:48
• I am actually surprised to hear that v.10 was exporting the 3D plots as vector graphics though. I don't have v.10 to test with, but I don't recall that being the case: I thought that 3D plots were rasterized upon export no matter what. I'd love to be corrected on this one, as it would be great to have a way to export infinitely resizable 3D graphics. Jul 7, 2015 at 18:49
• I get a rasterized image in both 10.0 and 10.1. Do you get vector in 10.0? The doc page on the PDF format mentions the "AllowRasterization" option. Take a look. Unfortunately in v10.0 and v10.1 it has no effect when I try it. In v9 it works as described. Bug maybe? I would ask WRI support about this. Jul 7, 2015 at 19:39
• I believe that PDF export functionality was rewritten for v10, so they might tell you that this is intentional and the bug is that "AllowRasterization" is still in the docs ... let us know what they say, I'm curious! Jul 7, 2015 at 19:39

Indeed, 3D plots like this were exported as vector graphics with generally huge numbers of polygons in version 8. But even then, the export was automatically rasterized whenever there were VertexColors present in the plot. I described this as a trick for getting smaller PDF files here, and also used it e.g. here.

So in general, I think it's actually a good thing that PDFs generated from 3D graphics are rasterized, provided it's done at a resolution appropriate for the desired device. However, despite this change in version 10, the developers haven't gotten this automatic rasterization quite right yet. For example, here is an issue that didn't get fixed, but which still can be repaired by artificially inserting a texture with VertexColors in the plot (that's what I do in my answer to the linked question).

So now we apparently have mandatory rasterization. While this makes exported files smaller, it can also backfire when you just have a Graphics3D with simple objects such as lines and a few polygons. Then there may not be any disk space savings at all from rasterization, but you pay the price of lower quality without reaping any rewards.

As a workaround for this lack of choice in Export, you could manually Print a selected Graphics3D as I do in this screen shot:

I right-clicked on the graphic and selected Print Graphic... from the context menu. Then I used the print dialog to save as PDF instead of printing. The result is a PDF file that maintains everything in vector graphics form (at least under Mac OS X). I think the printing route works because it assumes that the proper rasterization is going to be done by the printer driver, so Mathematica doesn't have to worry about it (since it's not meant to be a stored file). Of course, they may just have overlooked this loophole (let's hope they keep it open, then one could even consider making a palette for it).

Rasterization can also be avoided by exporting to EPS, but that format is outdated and can't handle opacity.

Edit

Another way to get the exported file as vector graphics is this:

Export["myFig2.pdf",
Graphics[Inset[myFigure, Automatic, Automatic, Scaled[1]]]]


Here, I actually export a 2D graphic into which the 3D figure has been placed as an inset.

• If it can be done by menu command, wouldn't you think it could be done by code? But it may be so well hidden that it's hard to discover how. Jul 8, 2015 at 4:18
• @MichaelE2 This question was the first time I became aware of the change, since I was (and am) using version 8 a lot more than 10. So I haven't been able to find any other programmatic solution... I hope you're right, though. Couldn't find anything in the Advanced Options...
– Jens
Jul 8, 2015 at 4:29
• didn't work for Mathematica10.0.2 on win7 Jul 11, 2016 at 4:27
• @Harry Sorry to hear that. Still works fine for me on Mac. Did you try both methods?
– Jens
Jul 11, 2016 at 4:43
• @Jens I now know the problem. I used a .png file for texture in one Sphere[] which may trig rasterize. When I removed png texture it works fine. Jul 11, 2016 at 14:27

Unfortunately, on version 10.3 the solutions proposed by Jens do not seem to work in at least some situations (see edit on this other question).

A workaround that I found to work well in my case is simply using GraphicsRow, which seems to automatically correctly tweak the options of Inset in a way that produces the expected result. If the 3D graphics to export is plot, just use

Export["out.pdf", GraphicsRow[{plot}, ImageSize -> 1000]]


Another workaround proposed by Alexey Popkov in a comment is using

Export["out.pdf",Graphics[Inset[plot], ImageSize -> 1000]]


These are of course simply slight variations of the solution with Inset given by Jens, but they're probably good to know for someone (like me) not knowing how to properly handle the options of Inset.

• The key improvement as compared to original Jens' workaround is explicit ImageSize specification moved from Graphics3D into enclosing Graphics. More generally it can be written as Graphics[Inset[plot], Options[plot, ImageSize]] and as GraphicsRow[{plot}, First@Options[plot, ImageSize]]. Nov 24, 2015 at 12:25
• didn't work for Mathematica10.0.2 on win7 Jul 11, 2016 at 4:29