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何ですか?