# How to export this PDF figure with a small size

I want to export a PDF figure with the following codes, but the size of the PDF is too big, about 1.5M. I hope the size can be around 100k. I have tried for a long time but can not find a good solution. Any help or suggestion will be highly appreciated!

\[Rho]2plus = {{0.2011205485336045077 +
1.*^-6 I, -0.017422322154311026 -
0.508770348467936524 I, -0.01627481119236278 -
0.009599125271231317 I,
0.00012377921551508936 -
0.0001037303194895626 I}, {-0.317422322154311026 +
0.008770348467936524 I, 0.5253584399150775 + 1.*^-6 I,
0.1810835129135062 - 0.050379441418388037 I,
0.012122030783398718 -
0.00011053335415397864 I}, {-0.01627481119236278 +
0.009599125271231317 I,
0.4810835129135062 + 0.050379441418388037 I,
0.07251617971431137 + 1.*^-6 I,
0.011027619410833644 +
0.00549701145732366 I}, {0.20012377921551508936 +
0.0001037303194895626 I,
0.012122030783398718 + 0.00011053335415397864 I,
0.011027619410833644 - 0.00549701145732366 I,
0.001004831837006529 + 1.*^-6 I}};

\[Rho]2minus = {{0.005277185010322719 + 1.*^-6 I,
0.0010040157957586214 +
0.04371079428674348 I, -0.09005650743684472643 -
0.046221573555130006 I, -0.003643884304307673 -
0.001085378855037156 I}, {0.2010040157957586214 -
0.24371079428674348 I,
0.0131515781501287 + 1.*^-6 I, -0.1857896769310657 +
0.01114973388880884 I,
0.008915832323651186 +
0.03176372686431984 I}, {0.5005650743684472643 +
0.046221573555130006 I, -0.0857896769310657 -
0.01114973388880884 I,
0.07651833701845997 + 1.*^-6 I, -0.0025963451307736015 -
0.034899274546212444 I}, {-0.003643884304307673 +
0.001085378855037156 I,
0.208915832323651186 -
0.23176372686431984 I, -0.0025963451307736015 +
0.034899274546212444 I, 0.005052899821088675 + 1.*^-6 I}};

figplus=GraphicsRow[
DiscretePlot3D[#@\[Rho]2plus[[i, j]], {i, 1, 4}, {j, 1, 4},
BoxRatios -> {1., 1., .8}, ExtentSize -> 0.5,
PlotRange -> {{.5, 4.5}, {.5, 4.5}, {-.5, .526}},
ColorFunction -> (Blend[{Hue[2/3], Hue[0]}, #] &),
ExtentElementFunction -> "ProfileCube",
Ticks -> {{{1, "A"}, {2, "B"}, {3, "C"}, {4, "D"}}, {{1,
"E"}, {2, "F"}, {3, "G"}, {4, "H"}}, Automatic},
AxesEdge -> {{-1, -1}, {1, -1}, {1, 1}},
FillingStyle -> Opacity[1],
LabelStyle ->
Directive[FontSize -> 12, FontFamily -> "Helvetica"],
Boxed -> True] & /@ {Re, Im} , ImageSize -> 500 ];

figminus =GraphicsRow[DiscretePlot3D[#@\[Rho]2minus[[i, j]], {i, 1, 4}, {j, 1, 4},
BoxRatios -> {1., 1., .8}, ExtentSize -> 0.5,
PlotRange -> {{.5, 4.5}, {.5, 4.5}, {-.5, .523}},
ColorFunction -> (Blend[{Hue[2/3], Hue[0]}, #] &),
ExtentElementFunction -> "ProfileCube",
Ticks -> {{{1, "A"}, {2, "B"}, {3, "C"}, {4, "D"}}, {{1,
"E"}, {2, "F"}, {3, "G"}, {4, "H"}}, Automatic},
AxesEdge -> {{-1, -1}, {1, -1}, {1, 1}},
FillingStyle -> Opacity[1],
LabelStyle ->
Directive[FontSize -> 12, FontFamily -> "Helvetica"],
Boxed -> True] & /@ {Re, Im} , ImageSize -> 500 ];
gg = Grid[{{figminus}, {figplus}}, Spacings -> {0, 0}]
Export["Fig8.pdf", gg, ImageResolution -> 600]


• The statement ExtentElementFunction adds additional information to the plot: > ExtentElementFunction is an option to DiscretePlot and DiscretePlot3D > that gives a function to use to generate the primitives for rendering > each extent element. If you need this statement you can save allways in an other format: Export["Fig8.pdf", gg] Export["Fig8.jpg", gg] PDF ~ 1.5 MB versus jpg ~ 60 KB, or leave out ExtentElementFunction -> "ProfileCube"
– user9660
Jun 29, 2014 at 6:26
• Please take a few minutes to format your post: mathematica.stackexchange.com/help/formatting. You can also take a look at your previous question that have already been edited by experienced community members. Jun 29, 2014 at 7:35
• You need to reformat your question, but definitely changing ImageResolution to less than 600 can significantly reduce the final size. Generally 300 is enough. Jun 29, 2014 at 7:50
• The code you posted is unreadable and un-copyable. Please fix the formatting. Editing help is on the right of the edit box. More help is available by pressing the (?) button in the edit toolbar. Jun 29, 2014 at 15:01
• @Lou, I do not want to save the figure as "jpg" format. I need a PDF figure, so as to keep the vector properties of the letters in the figure. Also I need to keep the "ProfileCube", because it looks very beautiful. @ Mahdi, If I use 300 as the ImageResolution, the size is still 1.6M Jun 30, 2014 at 1:07

For this answer, I accept no praise. All positive remarks toll @Jens. This link shows us a fantastic strategy (see Section: Exporting 3D graphics as PDF/EPS).

just include ... as part of the Prolog:

Map[SetOptions[#,
Prolog -> {{EdgeForm[], Texture[{{{0, 0, 0, 0}}}],
Polygon[#, VertexTextureCoordinates -> #] &[{{0, 0}, {1,
0}, {1, 1}}]}}] &, {Graphics3D, ContourPlot3D,
ListContourPlot3D, ListPlot3D, Plot3D, ListSurfacePlot3D,
ListVectorPlot3D, ParametricPlot3D, RegionPlot3D, RevolutionPlot3D,
SphericalPlot3D, VectorPlot3D, DiscretePlot3D}];


and for fine-tuning:

Export["Fig8.pdf", gg, ImageResolution -> 288]

• Thanks a lot for this answer. But the letters "0.5, 0.0, -0.5, A, B, C, D, ..." in exported "Fig8.pdf" figure are no longer in vector format. The letters cannot be chosen and edited by Adobe acrobat. I need vector format for the letters. Jul 1, 2014 at 4:24
• @user14634 Good to know. Why should one do that? What's the point?
– user9660
Jul 1, 2014 at 15:02
• This figure will be inserted in a paper. If we keep the letters in vector format, the printed figure in the paper will be very clear (high resolution). Otherwise, the figure is not clear, and the quality of the paper will be decreased. Jul 2, 2014 at 3:49
• @user14634 Oh! Paper, Why should one chose and edit letters by Adobe, save it by highres algo to a scientific Paper (presumably)? Are you using LaTeX?
– user9660
Jul 2, 2014 at 16:58
• Yes, the figure will be used in a scientific paper and will be edited by Latex. What is the meaning of "highres algo"? means high resolution algorithm? Would you please help me by saving this PDF figure with a small size? Thanks a lot! Jul 3, 2014 at 0:59