-3

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

user14634
  • 771
  • 6
  • 17
  • 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"

    –  Jun 29 '14 at 06:26
  • 1
    Please take a few minutes to format your post: https://mathematica.stackexchange.com/help/formatting. You can also take a look at your previous question that have already been edited by experienced community members. – Yves Klett Jun 29 '14 at 07:35
  • 2
    You need to reformat your question, but definitely changing ImageResolution to less than 600 can significantly reduce the final size. Generally 300 is enough. – Mahdi Jun 29 '14 at 07:50
  • 3
    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. – Szabolcs Jun 29 '14 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 – user14634 Jun 30 '14 at 01:07
  • I have improved the format. Thank you all for your kind help. – user14634 Jun 30 '14 at 01:13
  • @user14634, please post your improvement as answer. –  Jul 02 '14 at 18:35
  • @Lou, But it is not an answer. I need a small size vector-maintained PDF figure. – user14634 Jul 03 '14 at 01:03

1 Answers1

1

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. – user14634 Jul 01 '14 at 04:24
  • @user14634 Good to know. Why should one do that? What's the point? –  Jul 01 '14 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. – user14634 Jul 02 '14 at 03: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? –  Jul 02 '14 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! – user14634 Jul 03 '14 at 00:59
  • @user14634 If you persist in this strategy, your options are limited. Attempt an optimization with an Adobe product or another optimizer. Good luck. –  Jul 03 '14 at 14:54
  • I hope this problem can be solved within Mathematica. – user14634 Jul 04 '14 at 01:25