-3
$\begingroup$

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]

enter image description here

$\endgroup$
8
  • $\begingroup$ 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" $\endgroup$ – user9660 Jun 29 '14 at 6:26
  • 1
    $\begingroup$ 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. $\endgroup$ – Yves Klett Jun 29 '14 at 7:35
  • 2
    $\begingroup$ You need to reformat your question, but definitely changing ImageResolution to less than 600 can significantly reduce the final size. Generally 300 is enough. $\endgroup$ – Mahdi Jun 29 '14 at 7:50
  • 3
    $\begingroup$ 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. $\endgroup$ – Szabolcs Jun 29 '14 at 15:01
  • $\begingroup$ @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 $\endgroup$ – user14634 Jun 30 '14 at 1:07
1
$\begingroup$

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]
$\endgroup$
7
  • $\begingroup$ 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. $\endgroup$ – user14634 Jul 1 '14 at 4:24
  • $\begingroup$ @user14634 Good to know. Why should one do that? What's the point? $\endgroup$ – user9660 Jul 1 '14 at 15:02
  • $\begingroup$ 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. $\endgroup$ – user14634 Jul 2 '14 at 3:49
  • $\begingroup$ @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? $\endgroup$ – user9660 Jul 2 '14 at 16:58
  • $\begingroup$ 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! $\endgroup$ – user14634 Jul 3 '14 at 0:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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