2016-10-22 1 views
0

gridspecを使って2つのサブプロットを作成しようとしています(実際のプロットはもっと複雑ですが、これが基本的な考えです)。 plt.subplotを使用してサブプロットを作成していますが、これは期待される結果を生成していないようです。私は、図の右側の2番目のサブプロットだけを取得し、最初のサブプロットは取得しません。matplotlib.gridspecのtight_layoutがpyplot.subplotで正しく動作しないのはなぜですか?fig.add_subplotではdoes?

一方、fig.add_subplotを使用してサブプロットを作成すると、tight_layoutという警告が表示されますが、プロットが正しく表示されます。 pyplotのサブプロット関数が内部的にfig.add_subplotを呼び出しているので(サブプロットが既に存在するかどうかを確認するためにいくつかのチェックを行います)、私はこの動作に少し驚いています。ここでは、右端のサブプロットのみを生成するコードを示します。 plt.gcf().add_subplotを使用するようにコメントを切り替えると、期待どおりに機能します。

from matplotlib import gridspec,pyplot as plt 

gs = gridspec.GridSpec(1,1) 
ax1 = plt.subplot(gs[0,0]) 
# ax1 = plt.gcf().add_subplot(gs[0,0]) 
ax1.plot(range(3),range(3)) 
gs.tight_layout(plt.gcf(),rect=[0,0,0.45,1]) 

gs = gridspec.GridSpec(1,1) 
ax1 = plt.subplot(gs[0,0]) 
# ax1 = plt.gcf().add_subplot(gs[0,0]) 
ax1.plot(range(3),range(3)) 
gs.tight_layout(plt.gcf(),rect=[0.55,0,1,1]) 

plt.show() 

私は何か間違っているのですか、ここに何か不足していますか?

fig = gcf() 
a = fig.add_subplot(*args, **kwargs) 
bbox = a.bbox 
byebye = [] 
for other in fig.axes: 
    if other==a: continue 
    if bbox.fully_overlaps(other.bbox): 
     byebye.append(other) 
for ax in byebye: delaxes(ax) 

return a 

私の質問は次のとおりです:なぜfig.add_subplotと同じ結果を生成しないpyplot.subplotを使用しない参考のため、ここでは主に行いpyplot.subplot何ですか?

答えて

1

何がsubplotの場合は、プロットが重複していないかどうかを確認し、存在する場合は削除します。 2番目のサブプロットが最初のサブプロットと重複するため、2番目のサブプロットは最初のサブプロットを削除します。 Figure.add_subplotは、重複するサブプロットは削除しません。あなたが全体の数字を埋めるサブプロットを作成している

注:それは全体の数字を記入し、以前のサブプロットをオーバーラップするよう

gs = gridspec.GridSpec(1,1) 
ax1 = plt.subplot(gs[0,0]) 

これは1x1のグリッドでサブプロットです。

問題は正しく動作しているtight_layoutとは関係ありません。

関連する問題