17

では、figure3 つの垂直サブプロットが で追加されているadd_subplot場合、どうすれば真ん中のものを選択できますか?

今、私はこのリストの理解を行います:

[r[0] for r in sorted([[ax, ax.get_geometry()[2]] for ax in self.figure.get_axes()], key=itemgetter(1))]

ここで、必要なインデックスを対応する で簡単に選択できますaxes。これを行うより簡単な方法はありますか?

4

1 に答える 1

16

matplotlib のドキュメントから:

Figure にキー (args, kwargs) を持つサブプロットが既にある場合は、単にそのサブプロットを現在のものにして、それを返します。

次に例を示します。

import matplotlib.pyplot as plt

fig = plt.figure()  
for vplot in [1,2,3]:
    ax = fig.add_subplot(3,1,vplot)
    ax.plot(range(10),range(10))

ax_again = fig.add_subplot(3,1,2)
ax_again.annotate("The middle one",xy=(7,5),xytext=(7,5))

plt.show()

中央のプロットは、注釈を付けることができるように再度呼び出されます。

元の呼び出しで背景を設定した場合、サブプロットを 2 回目に取得したときに再度設定する必要がありますか?

はい。元の呼び出しの引数とキーワードは、一意の識別子を作成するために使用されます。したがって、Figure がこの一意の識別子を再度生成するには、同じ引数 (グリッド定義、位置) とキーワードを再度渡す必要があります。例えば:

import matplotlib.pyplot as plt

fig = plt.figure()  
ax = fig.add_subplot(2,1,1,axisbg='red')
ax.plot(range(10),range(10))
ax = fig.add_subplot(2,1,2)
ax.plot(range(10),range(10))

ax_again = fig.add_subplot(2,1,1,axisbg='red')
ax_again.annotate("The top one",xy=(7,5),xytext=(7,5))

plt.show()

を使用するとどうなります ax_again.change_geometry() か?

たとえば、312 から 422 に change_geometry を使用すると、add_subplot の使用方法が変わると思うかもしれませんが、そうではありません。change_geometry を呼び出すと、バグまたは未定義の動作が発生するようです。引数とキーワードを使用して最初に生成された一意のキーは、最初の add_subplot 呼び出しまで更新されません。したがって、add_subplot 呼び出しで軸を取得したい場合は、元の引数とキーワードを使用して add_subplot を呼び出す必要があります。詳細については、この問題レポートに従ってください: https://github.com/matplotlib/matplotlib/issues/429

今のところ私の推測では、add_subplot 呼び出しで生成した後にサブプロットのプロパティを変更すると、一意のプロパティは調整されません。したがって、元の引数とキーワードを使用するだけで、うまくいくことを願っています。

于 2011-08-18T02:49:46.450 に答える