2017-06-10 12 views
0

matplotlibのアノテーションを無視するtight_layout()関数を使用したいと思います。例として、これはtight_layoutとプロットである:Matplotlibs:サイズ変更のためのアノテーションを避ける図

fig = plt.figure() 
fig.patch.set_facecolor('grey') 

ax1 = plt.subplot(221) 
ax2 = plt.subplot(223) 
ax3 = plt.subplot(122) 

def example_plot(ax, fontsize=12): 
    ax.plot([1, 2]) 
    ax.locator_params(nbins=3) 
    ax.set_xlabel('x-label', fontsize=fontsize) 
    ax.set_ylabel('y-label', fontsize=fontsize) 
    ax.set_title('Title', fontsize=fontsize) 

example_plot(ax1) 
example_plot(ax2) 
example_plot(ax3) 

plt.tight_layout() 

plt.annotate('a)', xy=(0, 1), xycoords='figure fraction', ha='left', va='top') 
plt.annotate('b)', xy=(0, 0.5), xycoords='figure fraction', ha='left', va='top') 
plt.annotate('c)', xy=(0.5, 1), xycoords='figure fraction', ha='left', va='top') 

enter image description here

enter image description here

図は、(注釈のためのスペースを作るために(左と上に)サイズを大きくしているように見えますイーラーベルは端まで完全には行きません)。しかし、注釈を再配置せずに図の上に追加したいと思います。どういうわけかtight_layoutでこれらの注釈を無視できますか?


編集:それは実際にそれが判明tight_layoutの問題ではありません。でもtight_layoutを呼び出すことなく、プロットのこのサイズ変更が行われます。

enter image description here

enter image description here

をしかし、私は別のコンピュータ上で同じことをしようとした場合、予想される動作(ノーサイズ変更)が発生します。どちらのシステムもmatplotlib 2.0.0とipythonを実行します。

+0

あなたが何を求めているのかは不明です。アノテーションの有無にかかわらず、数字はまったく同じです。これは実際にはコードを見ても明らかですが、 'tight_layout'は注釈が追加される前**と呼ばれているので、そこにいるかどうかは分かりません。 – ImportanceOfBeingErnest

+0

あなたのコメントは、「tight_layout」は問題ではないことを認識させました。また、図がなくてもサイズが変更されます。紛らわしいことに、matplotlibの同じバージョンを使用している別のコンピュータでは、あなたが記述した動作が得られます。 – erik

答えて

1

あなたは間違った方向からこれを見ていると思います。まず、 "問題"はありません。すべてが期待どおりに動作しています。

tight_layout図形サイズは変更されません。利用可能なスペースをより有効に使うために、図の中の要素を再配置するだけです。

bbox_inches="tight"のため、保存された図形がクロップドの効果です。これは、%matplotlib inlineバックエンドに図の保存バージョンが表示されるためです。保存した画像にキャンバス内のすべての要素が含まれるように、元の図形から画像が切り取られます。
したがって、表示される画像は、通常、元の画像よりも小さくなります。

ただし、Figureの端にラベルを近づけると、Figureを切り取ることができません。これはラベルを切断するためです。これは、図がラベルのない場合と比較して成長したように見えるかもしれません。しかし、説明したように、実際には数字は切り取られていません。

解決策は、必要に応じて、bbox_inches="tight"アルゴリズムがより多くの図形を切り抜くことができるように、図形の端からラベルをさらに遠くに置くことです。

+0

これはすべての私の混乱を明確にします。 – erik

0

%matplotlib inlineが使用されている場合は、明らかな問題です。代わりに%matplotlib notebookに切り替えると、すべて正常です。

関連する問題