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


109

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

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

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

pngeps?または他の何か?コンパイルpdfを台無しにする隠し番号が発生するので、私はできませんLatexmk

回答:


153

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

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

私はepsファイルが最もよく機能することを発見しました。dpiパラメーターは、それらがドキュメントで本当に見栄えをよくするものです。

更新:

保存する前にFigureの向きを指定するには、plt.savefig呼び出しの前に次を呼び出しますが、プロットの作成後(名前がのAxesを使用してプロットしたと仮定ax):

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

ここelevation_angleで(度)数(垂直z軸から下)の極角を指定し、azimuthal_angle指定(Z軸まわり)の方位角。

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


@ spencerlon2保存する前に図の向きを変更したい場合はどうなりますか?
ダスティン2013

13
なぜDPIパラメータが必要なのですか?EPSはベクター形式ではありませんか?
mkvoya 2018

1
良い点
-svg

format='eps'必要に応じて省略できます。この場合、形式はファイル名から推測されます。
timgeb

72

結果を追加するためだけに、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を使用しました。目的のdpiに変換し、GiMPまたはInkscapeでフォーマットします。

編集:.svgはベクトルグラフィックスであり、「無限の解像度」を持っているので、dpiは明らかに問題ではありません。


2
imshow(..)図のどこかで使用する場合、DPIは非常に重要です。これらのビットマップは、SVGに埋め込まれるときにラスタライズされます。デフォルトのDPIを使用すると、結果は画面に表示されるものよりもさらに悪くなり、出版物には明らかに不適切です。
Evgeni Sergeev 2017年

また、SVG のファイルサイズを小さくするためにScour(github.com/scour-project/scour)を強くお勧めします。最もアグレッシブな設定では、ファイルサイズを元のサイズの50%、. svgz圧縮形式を使用すると5%に削減できます。
grofte

8

さて、私はspencerlyon2の答えが機能しているのを見つけましたが、誰かがその1行で何をすべきかわからない場合は、私はこのようにする必要がありました:

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)

6

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

あなたが持っているとしましょうmatrixオブジェクト(パンダまたは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

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

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

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

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


5

次を使用して、1920x1080(または1080p)のFigureに保存できます。

fig = plt.figure(figsize=(19.20,10.80))

また、はるかに高くまたは低くすることもできます。上記のソリューションは印刷に適していますが、最近では、作成した画像をPNG / JPG形式に変換したり、ワイドスクリーン形式で表示したりする必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.