web-dev-qa-db-ja.com

Matplotlib:図をiPythonノートブックからファイルとして保存

Matplotlibの図をiPythonノートブックからファイルとして保存しようとしています。

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_axes([1,1,1,1])
ax.plot([1,2])

fig.savefig('test.png')

IPythonノートブックのインラインビューは見栄えがいいです。

Inline view of figure in iPython notebook


ただし、ファイル「test.png」はほとんど空です。プロットが右上にシフトしているように見えます。隅に目盛りラベル「1.0」と「0.0」があります。

test.png

インラインビューのように見えるiPythonノートブックからファイルを作成するにはどうすればよいですか?

22
Martin Preusse

解決した問題:'bbox_inches='tight'引数をsavefigに追加します。

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_axes([1,1,1,1])
plt.plot([1,2])

savefig('test.png', bbox_inches='tight')

ここで何が起こっているのか分かりませんが、ファイルはiPythonノートブックのインラインファイルのようになりました。わーい。

21
Martin Preusse

実際、savefigは適切に機能しています。 _add_axes_を呼び出すとき、リストは長方形_[left, bottom, width, height]_を指定します。 Figureは両方の軸で0から1になり、左下がOriginであるため、Figureの右上から始まる幅と高さ1の長方形を作成しています。おそらくax = fig.add_axes([0,0,1,1])を実行したいでしょう。

インラインプロットが軸を配置した場所を考慮しない理由はわかりません。推測する必要がある場合、インラインバックエンドが自動的に境界ボックスを計算し、それに応じてインラインフィギュアを配置すると言うでしょう。

5
tbekolay