以前の answer では、軸を正しく表示するためにadd_subplot
ではなくadd_axes
を使用することをお勧めしましたが、ドキュメントを検索して、いつどのように使用する必要があるのか理解できませんでしたこれらの機能のいずれか。
誰でも違いを説明できますか?
_add_axes
_ と _add_subplot
_ の両方で、Axesを図に追加します。どちらも(aのサブクラス)_matplotlib.axes.Axes
_オブジェクトを返します。
ただし、軸を追加するために使用されるメカニズムは大幅に異なります。
add_axes
__add_axes
_ の呼び出し署名はadd_axes(rect)
です。ここで、rect
はリスト_[x0, y0, width, height]
_で、新しい軸の左下の点を示します図は_(x0,y0)
_とその幅と高さを座標化します。したがって、座標軸はキャンバス上の絶対座標に配置されます。例えば。
_fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
_
キャンバス自体とまったく同じ大きさの図をキャンバスに配置します。
add_subplot
__add_subplot
_ の呼び出し署名は、事前に定義された位置に軸を配置するオプションを直接提供しません。むしろ、サブプロットグリッドに従って、軸を配置する場所を指定できます。この位置を指定する通常の最も簡単な方法は、3つの整数表記です。
_fig = plt.figure()
ax = fig.add_subplot(231)
_
この例では、新しい軸が2行3列のグリッドの最初の位置(_1
_)に作成されます。単一のAxesのみを生成するには、add_subplot(111)
を使用します(1 x 1サブプロットグリッドの最初のプロット)。 (新しいmatplotlibバージョンでは、引数なしのadd_subplot() `も可能です。)
この方法の利点は、matplotlibが正確な配置を処理することです。デフォルトでは、add_subplot(111)
は、_[0.125,0.11,0.775,0.77]
_または同様の位置にある軸を生成します。これにより、タイトルと(目盛り)ラベルのために軸の周りに十分なスペースが既に残っています。ただし、この位置は、プロット内の他の要素、タイトルセットなどによっても変わる可能性があります。pyplot.subplots_adjust(...)
またはpyplot.tight_layout()
を使用して調整することもできます。
ほとんどの場合、_add_subplot
_は、キャンバス上のプロットの軸を作成するために推奨される方法です。正確な配置が重要な場合にのみ、_add_axes
_が役立ちます。
_import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (5,3)
fig = plt.figure()
fig.add_subplot(241)
fig.add_subplot(242)
ax = fig.add_subplot(223)
ax.set_title("subplots")
fig.add_axes([0.77,.3,.2,.6])
ax2 =fig.add_axes([0.67,.5,.2,.3])
fig.add_axes([0.6,.1,.35,.3])
ax2.set_title("random axes")
plt.tight_layout()
plt.show()
_
1つ以上のサブプロットとそれらのハンドルを一緒に取得する最も簡単な方法は plt.subplots()
です。 1つの軸に対して、
_fig, ax = plt.subplots()
_
または、より多くのサブプロットが必要な場合は、
_fig, axes = plt.subplots(nrows=3, ncols=4)
_
最初の質問 では、Axesはfig.add_axes([0,0,1,1])
を使用して配置され、Figureの境界に密着しました。これの欠点は、もちろん目盛り、目盛りラベル、軸ラベル、およびタイトルが切り取られることです。したがって、私は_fig.add_subplot
_を使用するように回答へのコメントの1つで提案しました。これにより、これらの要素のための十分なスペースが自動的に許可され、これが十分でない場合は、pyplot.subplots_adjust(...)
またはpyplot.tight_layout()
。