2012-04-12 14 views
6

この問題のある人は誰も見つかりません。 matplotlibでは、show()またはsavefig()を使用してプロットを表示できます。これらはわずかに異なる画像を生成します。私の場合、savefig()イメージは醜いものであり、理解するのが難しいです。matplotlib、savefig:DPIの設定は無視されます

私はDPIのサイズをshow()のものと一致するように設定することを提案したトピックをいくつか見つけました。私が試してみました:

- 直接matplotlib.rcParams [ 'savefig.dpi'] = 80

で>設定savefig.dpi - >設定savefig.dpi直接〜/ .matplotlib/matplotlibrcインチ

- > rcファイルをCWDに移動する。

- >最後に、savefig( 'image.pdf'、= 80 DPI)

を使用すると、属性が実際にセットを取得していることを、私を確認することができます。しかし、設定はsavefig()によって無視されるようです。誰もこれで助けることができますか?

(簡体字)コード:

plt.bar(ind, functimes, yerr=stddev, bottom=0, width=barWidth, align='center', color='b') 

ax = plt.gca() 
ax.legend(barRcts, barLegend) 
plt.title("Function Call Overhead") 
plt.xlabel("Function ID") 
plt.ylabel("Execution Time [us]") 

plt.xticks(ind, funcNames) 
figtest.autofmt_xdate() 

plt.savefig(out_file, dpi=80, format='pdf') 
+5

'matplotlib'は' pdf'ファイルをベクトル形式で保存します。そこにビットマップイメージがない限り、DPIは解像度に依存しないため、ベクトルイメージでは意味がありません。 – Avaris

+1

ああ、分かります。したがって、save()を使ってpdfイメージを保存する方法はありません(show()を使って(手動で)保存できるイメージと同じになるようにしますか? – memstick

+5

これらは同一である必要があります。 Figureを保存する前にリサイズする場合にのみ違いがあります。しかし、Figureのサイズ( 'figure((width、height))を設定することもできます。' savefig'はそれを使用します。 – Avaris

答えて

3

PDF節約がない(ベクタ形式で無意味である)任意の行/ポリゴン解像度のため、PDFファイル内の画像解像度のためのDPI設定を使用します。

画面の出力に満足してスケーラブルなグラフィックを表示する必要がない場合は、pngという名前で保存しても問題ありません。

+0

'contourf'(例えば)を使用した場合、pdf/svgの中にラスターイメージが得られるので、dpiは再び意味があります。 –

+0

@ChrisH - 私は同意しません。 Contourfはラスターではなくベクトル出力を生成します。しかし、imshowはイメージを生成します(メモリから)助けとなるイメージdpiが存在します。 HTH – pelson

+1

あなたが正しいとわかります - 私の5.5MBの.svgによると、絶対的なクロールまでインクスケープが遅くなります。次に、dpi設定を使用すると、軸線とオーバーレイ線の線幅を正しく設定できます。私は少し前にこのことを認識しましたが、ログインして更新するのを忘れました。 –

関連する問題