5

Mathematica によって生成された eps または pdf ファイルのサイズを最適化する方法は?

ファイル サイズが本来のサイズよりも 50 ~ 100 倍大きいのが一般的です (以下の例)。アプリケーションによっては (例: 出版物に図を掲載したり、大きなポスターに掲載したりするなど)、ベクター グラフィックスで軸を使用する必要があるため、すべてにラスター グラフィックスを使用することは、私にとって最良の選択肢ではありません。

(Mathematica で適切なオプションを設定するか、他のアプリケーションでさらに変換を行うことによる) すべての実用的な解決策を歓迎します。

たとえば、次のコードは次の eps フィギュアを生成します。

plot = ListDensityPlot[
Table[Random[], {100}, {100}],
InterpolationOrder -> 0]

Export["testplot.eps", plot]
Export["testplot.pdf", plot]

サイズが 3.3MB の eps ファイルと 5MB の pdf サイズのファイルが生成されます (違いがある場合は、Mac OS X 10.6 上の Mathematica 7 で)。

比較のために、同じ軸を持つ 3x3 プロットには 8kB (pdf) から 20kB (eps) があります。100x100 ポイントは、bmp で 30kB です (png では少し少なくなります)。

この問題は、他のタイプのプロットでも同じで、 に重点が置かれていListPlot3Dます。

4

3 に答える 3

5

彼が提供したリンクでAlexey の答えを適用する方法を理解しているかもしれません。ただし、ここで問題が発生した場合に備えて、この手法を 2D グラフィックスに適用する方法を説明します。

良いプロットを作成したいのであれば、Mathematica に非常に特化する必要があるという難しい方法を見つけました。このため、3D のラスターの投稿で気づいたかもしれませんが、Mathematica が満足できるように、すべてのオプションを指定するオブジェクトを作成しました。

in = 72;
G2D = Graphics[{},
   AlignmentPoint -> Center, 
   AspectRatio -> 1,
   Axes -> False,
   AxesLabel -> None,
   BaseStyle -> {FontFamily -> "Arial", FontSize -> 12},
   Frame -> True,
   FrameStyle -> Directive[Black],
   FrameTicksStyle -> Directive[10, Black],
   ImagePadding -> {{20, 5}, {15, 5}},
   ImageSize -> 5 in, 
   LabelStyle -> Directive[Black],
   PlotRange -> All,
   PlotRangeClipping -> False,
   PlotRangePadding -> Scaled[0.02]
]; 

ここで、指定する必要があることに言及する必要がありますImagePadding。これを eps ファイルに設定するとall、Mathematica が表示するものとは異なります。いずれにせよ、このオブジェクトを使用すると、プロパティを簡単に変更できると思います。

これで、問題に進むことができます。

plot = ListDensityPlot[
  Table[Random[], {100}, {100}],
  InterpolationOrder -> 0,
  Options[G2D]
]

出力

以下は、軸とラスターを分離し、それらを結果に結合します。

axes = Graphics[{}, AbsoluteOptions[plot]];
fig = Show[plot, FrameStyle -> Directive[Opacity[0]]];
fig = Magnify[fig, 5];
fig = Rasterize[fig, Background -> None];
axes = First@ImportString[ExportString[axes, "PDF"], "PDF"];
result = Show[axes, Epilog -> Inset[fig, {0, 0}, {0, 0}, ImageDimensions[axes]]]

出力2

ここで説明できない唯一の違いは、軸のラベルです。小数点があります。最後に、それらをエクスポートします。

Export["Result.pdf", result];
Export["Result.eps", result];

結果は、pdf ファイルの場合は 115 Kb、eps ファイルの場合は 168 Kb のサイズのファイルになります。

アップデート:

Mathematica 7 を使用している場合、eps ファイルは正しく表示されません。あなたが見るのは、側面が黒のメインフィギュアだけです。これはバージョン 7 のバグです。ただし、これは Mathematica 8 で修正されています。

軸ラベルが異なる理由がわからなかったと以前に述べました。アレクセイ・ポプコフはそれに対する修正を思いついた. を作成するaxesには、次figresult使用します。

axes = Graphics[{}, FilterRules[AbsoluteOptions[plot], Except[FrameTicks]]];
fig = Show[plot, FrameStyle -> Directive[Opacity[0]]];
fig = Magnify[fig, 5];
fig = Rasterize[fig, Background -> None];
axes = First@ImportString[ExportString[axes, "PDF"], "PDF"];
result = Show[axes, Epilog -> Inset[fig, {0, 0}, {0, 0}, ImageDimensions[axes]]]
于 2011-11-01T19:34:53.673 に答える
3

私は次の両方である程度の成功を収めました。

(1)保存する前にプロットをラスタライズします。品質は一般的に合理的で、サイズはかなり低下します。

(2)PostScriptに保存してから、(Linuxマシンを使用しています)ps2pdfを使用してpdfを取得します。これは、Mathematicaから直接pdfに保存するよりもかなり小さい傾向があります。

ダニエル・リヒトブラウ

于 2011-10-31T14:33:39.470 に答える
2

ImageResolution.pdf ではうまく機能しますが、.eps では成功していません。

Export["testplot600.pdf", plot, ImageResolution -> 600]

出力サイズは、600 dpi で 242 KB、300 dpi で 94 KB です。にも設定できImageSizeますExport

サードパーティのルートに行きたい場合は、GraphicConverter をお勧めします。非常に信頼性が高く、多くのオプションがあります。

于 2011-10-31T13:48:06.777 に答える