8

matplotlib.pyplot.contourf() 関数を使用して、等高線プロットを生成しています。関数呼び出しの引数は次のとおりです。

contourf(xvec,xvec,w,levels,cmap=matplotlib.cm.jet)

どこ

xvec = numpy.linspace(-3.,3.,50)
levels = numpy.linspace(-0.01,0.25,100)

w は私のデータです。

結果のプロットは画面上ではかなりきれいに見えますが、matplotlib.pyplot.savefig() への呼び出しを使用して pdf に保存すると、結果の pdf には多くのエイリアシングが発生します (それが原因だと思います)。savefig の呼び出しは単純savefig('filename.pdf')です。dpi 引数を使用してみましたが、うまくいきませんでした。matplotlib.get_backend()「TkAgg」を吐き出す呼び出し。

問題を示すために、png として保存された図 (画面上での外観と同様) と比較して、pdf として保存された図を添付します。

エイリアシングなしの png: https://dl.dropbox.com/u/6042643/wigner_g0.17.png

エイリアシング付きの pdf: https://dl.dropbox.com/u/6042643/wigner_g0.17.pdf

あなたが答えを出すのを助けるために私が与えることができる他の詳細があれば教えてください. .eps として保存すると、pdf に保存する場合と同様の悪い結果が生じることに注意してください。しかし、pdfは問題をさらに明確に示しています。私の目標は、ラテックス ドキュメントに添付して科学論文として公開できる製品品質の .eps を作成することです。満足のいく結果が得られる方法を見つけることができれば、ある形式で保存してから変換する場所を何らかの方法で回避できれば幸いです。

一番、

アルネ

4

2 に答える 2

6

私は、pdf での輪郭描画がそれほど悪いとは思いもしませんでした。そうです、輪郭はmatplotlibの外部のPDFレンダラーによってアンチエイリアスされていると思います。このため、結果の PDF を表示するためにどのアプリケーションを使用するかについて特に注意する必要があると思います。私が見た中で最も優れた動作は GIMP を使用した場合ですが、うまく機能する他のビューアーもたくさんあると確信しています。

この問題を修正するために (GIMP で PDF を表示する場合)、matplotlib で生成された輪郭を「​​ラスタライズ」して、醜い白い線の問題を回避することができました。

import matplotlib.pyplot as plt
import numpy as np


xs, ys = np.mgrid[0:30, 0:40]
data = (xs - 15) ** 2 + (ys - 20) ** 2 + (np.sin(ys) + 10) ** 2

cs = plt.contourf(xs, ys, data, 60, cmap='jet')

# Rasterize the contour collections
for c in cs.collections:
    c.set_rasterized(True)

plt.savefig('test.pdf')

これにより、あなたが示した問題を示さない等高線図が作成されました。

別の、おそらくより良いアプローチは、輪郭の下に色付きの線を配置してアンチエイリアシングをだますことです。

import matplotlib.pyplot as plt
import numpy as np


xs, ys = np.mgrid[0:30, 0:40]
data = (xs - 15) ** 2 + (ys - 20) ** 2 + (np.sin(ys) + 10) ** 2

# contour the plot first to remove any AA artifacts
plt.contour(xs, ys, data, 60, cmap='jet', lw=0.1)
cs = plt.contourf(xs, ys, data, 60, cmap='jet')

plt.savefig('test.pdf')

Figure を ".pdf" ではなく ".ps" として保存すると、これらの問題が発生しないことに注意してください。これはおそらく 3 番目の方法です。

これが、紙を思い通りに仕上げるのに役立つことを願っています。

于 2013-04-05T10:01:16.807 に答える