Matplotlib の savefig() 関数で bbox_inches = 'tight' を設定すると、Figure ウィンドウのすべてのコンテンツをカプセル化する最も狭い境界ボックスを見つけようとします。残念ながら、最も狭い境界ボックスには、目に見えない軸が含まれているようです。
たとえば、次のスニペットでは、設定 bbox_inches = 'tight' が希望どおりに機能します。
import matplotlib.pylab as plt
fig = plt.figure(figsize = (5,5))
data_ax = fig.add_axes([0.2, 0.2, 0.6, 0.6])
data_ax.plot([1,2], [1,2])
plt.savefig('Test1.pdf', bbox_inches = 'tight', pad_inches = 0)
これは以下を生成します:
保存された pdf の境界は、コンテンツの境界に対応します。これは素晴らしいことですが、注釈を配置するために一連の非表示の図の軸を使用するのが好きです。非表示の軸が表示されているコンテンツの境界を超えている場合、pdf の境界は表示されているコンテンツよりも大きくなります。例えば:
import matplotlib.pylab as plt
fig = plt.figure(figsize = (5,5))
fig_ax = fig.add_axes([0, 0, 1, 1], frame_on = False)
fig_ax.xaxis.set_visible(False)
fig_ax.yaxis.set_visible(False)
data_ax = fig.add_axes([0.2, 0.2, 0.6, 0.6])
data_ax.plot([1,2], [1,2])
plt.savefig('Test2.pdf', bbox_inches = 'tight', pad_inches = 0)
生産
Figure ウィンドウの非表示項目を無視するように savefig() を強制するにはどうすればよいですか? 私が思いついた唯一の解決策は、境界ボックスを自分で計算し、bbox を明示的に savefig() に指定することです。
念のため、Mac OS X 10.8.5 の Python 2.7.3 で Matplotlib 1.2.1 を実行しています。