web-dev-qa-db-ja.com

matplotlib savefigイメージトリム

次のサンプルコードは、軸のない基本的なラインプロットを生成し、SVGファイルとして保存します。

import matplotlib.pyplot as plt
plt.axis('off')
plt.plot([1,3,1,2,3])
plt.plot([3,1,1,2,1])
plt.savefig("out.svg", transparent = True)

画像の解像度/寸法を設定するにはどうすればよいですか?折れ線グラフ以外の画像のすべての側面にパディングがあります。画像のエッジに線が表示されるように、パディングを削除するにはどうすればよいですか?

28
oden

私は、matplotlibで同じことをする方法がいくつもあることに絶えず驚いています。
このように、誰かがこのコードをもっと簡潔にすることができると確信しています。
とにかく、これは問題を解決する方法を明確に示しているはずです。

_>>> import pylab
>>> fig = pylab.figure()

>>> pylab.axis('off')
(0.0, 1.0, 0.0, 1.0)
>>> pylab.plot([1,3,1,2,3])
[<matplotlib.lines.Line2D object at 0x37d8cd0>]
>>> pylab.plot([3,1,1,2,1])
[<matplotlib.lines.Line2D object at 0x37d8d10>]

>>> fig.get_size_inches()    # check default size (width, height)
array([ 8.,  6.])
>>> fig.set_size_inches(4,3) 
>>> fig.get_dpi()            # check default dpi (in inches)
80
>>> fig.set_dpi(40)

# using bbox_inches='tight' and pad_inches=0 
# I managed to remove most of the padding; 
# but a small amount still persists
>>> fig.savefig('out.svg', transparent=True, bbox_inches='tight', pad_inches=0)
_

ドキュメントsavefig()の場合。

50
bernie

デフォルトの軸オブジェクトは、タイトル、目盛りラベルなどのための余地を残しています。領域全体を埋める独自の軸オブジェクトを作成します。

fig=figure()
ax=fig.add_axes((0,0,1,1))
ax.set_axis_off()
ax.plot([3,1,1,2,1])
ax.plot([1,3,1,2,3])
fig.savefig('out.svg')

Svg形式では、一番下の行が表示されませんが、png形式では表示されるため、おそらくsvgレンダラーの機能です。すべてを見えるようにするために、少しだけパディングを追加することもできます。

3