31
$\begingroup$

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?

$\endgroup$
11
  • $\begingroup$ Specify the file format: Export["\\Figure.pdf", myFigure, "PDF"] $\endgroup$ Jul 7, 2015 at 18:37
  • $\begingroup$ @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). $\endgroup$
    – MarcoB
    Jul 7, 2015 at 18:48
  • $\begingroup$ 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. $\endgroup$
    – MarcoB
    Jul 7, 2015 at 18:49
  • 1
    $\begingroup$ 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! $\endgroup$
    – Szabolcs
    Jul 7, 2015 at 19:39
  • 1
    $\begingroup$ none of these options work in version 13 $\endgroup$
    – elbOlita
    Nov 9, 2022 at 17:49

2 Answers 2

25
$\begingroup$

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:

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.

$\endgroup$
9
  • $\begingroup$ 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. $\endgroup$
    – Michael E2
    Jul 8, 2015 at 4:18
  • $\begingroup$ @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... $\endgroup$
    – Jens
    Jul 8, 2015 at 4:29
  • $\begingroup$ didn't work for Mathematica10.0.2 on win7 $\endgroup$
    – Harry
    Jul 11, 2016 at 4:27
  • $\begingroup$ @Harry Sorry to hear that. Still works fine for me on Mac. Did you try both methods? $\endgroup$
    – Jens
    Jul 11, 2016 at 4:43
  • $\begingroup$ @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. $\endgroup$
    – Harry
    Jul 11, 2016 at 14:27
8
$\begingroup$

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.

$\endgroup$
2
  • $\begingroup$ 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]]. $\endgroup$ Nov 24, 2015 at 12:25
  • $\begingroup$ didn't work for Mathematica10.0.2 on win7 $\endgroup$
    – Harry
    Jul 11, 2016 at 4:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.