web-dev-qa-db-ja.com

pythonに画像を非常に高品質で保存する

pythonプロットを非常に高品質で保存するにはどうすればよいですか?

つまり、pdfファイルに保存されたオブジェクトを拡大し続けても、ぼけはありませんか?

また、保存するのに最適なモードは何ですか?

pngeps?または他の? pdfコンパイルを混乱させる隠し番号があるため、Latexmkを実行できません。

87
dustin

matplotlibを使用していて、ラテックスドキュメントで適切な数値を取得しようとしている場合は、epsとして保存します。具体的には、コマンドを実行して画像をプロットした後、次のようなものを試してください。

plt.savefig('destination_path.eps', format='eps', dpi=1000)

Epsファイルが最適に機能し、dpiパラメーターがドキュメントで実際に見栄えをよくするものであることがわかりました。

更新:

保存する前にFigureの方向を指定するには、単にplt.savefig呼び出しの前に、プロットを作成した後に以下を呼び出します(axという名前のAxesを使用してプロットした場合):

ax.view_init(elev=elevation_angle, azim=azimuthal_angle)

ここで、elevation_angleは極角(垂直z軸から下)を指定する数値(度単位)であり、azimuthal_angleは(z軸の周りの)方位角を指定します。

最初に画像をプロットしてから回転し、実際のプロットのすぐ下のウィンドウの下部に向かって表示される角度の現在の値を見ると、これらの値を決定するのが最も簡単であることがわかります。 x、y、z、位置はデフォルトで表示されますが、画像のクリック+ドラッグ+回転を開始すると2つの角度に置き換えられることに注意してください。

125
spencerlyon2

Matplotlibを使用して、結果を追加するだけです。

.epsはすべてのテキストを太字にし、透明度を削除しました。 .svgは、実際に私のグラフのように見える高解像度の写真をくれました。

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# Do the plot code
fig.savefig('myimage.svg', format='svg', dpi=1200)

多くの科学雑誌では、画像の種類に応じて1200/600/300 dpiの画像が必要なので、1200 dpiを使用しました。 GiMPまたはInkscapeで必要なdpiと形式に変換します。

編集:.svgはベクターグラフィックスであり、「無限の解像度」を持つため、明らかにdpiは重要ではありません。

51
grofte

OK

beingsaved = plt.figure()

# some scatters
plt.scatter(X_1_x, X_1_y)
plt.scatter(X_2_x, X_2_y)

beingsaved.savefig('destination_path.eps', format='eps', dpi=1000)
4
Jonatán Iván

Matplotlibの代わりにseabornプロットを使用している場合、次のような.png画像を保存できます。

matrixオブジェクト(pandasまたはnumpyのいずれか)があり、ヒートマップを取得するとします。

import seaborn as sb

image = sb.heatmap(matrix)   # this gets you the heatmap
image.figure.savefig("C:/Your/Path/ ... /your_image.png")   # this saves it

このコードは、シーボーンの最新バージョンと互換性があります。 stackoverflowに関するその他のコードは、以前のバージョンでのみ機能しました。

私が好きなもう一つの方法はこれです。次の画像のサイズを次のように設定します。

plt.subplots(figsize=(15,15))

その後、出力をコンソールにプロットし、そこから必要な場所にコピーアンドペーストできます。 (seabornはmatplotlibの上に構築されているため、問題はありません。)

3
Leevo