38

2 次 y 軸 ( twinxを使用して作成) を含む複数のサブプロットがある場合、これらの 2 次 y 軸をサブプロット間で共有するにはどうすればよいでしょうか? それらを自動的に均等にスケーリングしたい(後でy制限を手動で設定しないでください)。プライマリ y 軸の場合、これはsubplotの呼び出しでキーワードshareyを使用することで可能です。

以下の例は私の試みを示していますが、両方のサブプロットのセカンダリ y 軸を共有できません。私は Matplotlib/Pylab を使用しています:

ax = []

#create upper subplot
ax.append(subplot(211))
plot(rand(1) * rand(10),'r')

#create plot on secondary y-axis of upper subplot
ax.append(ax[0].twinx())
plot(10*rand(1) * rand(10),'b')

#create lower subplot and share y-axis with primary y-axis of upper subplot
ax.append(subplot(212, sharey = ax[0]))
plot(3*rand(1) * rand(10),'g')

#create plot on secondary y-axis of lower subplot
ax.append(ax[2].twinx())
#set twinxed axes as the current axes again,
#but now attempt to share the secondary y-axis
axes(ax[3], sharey = ax[1])
plot(10*rand(1) * rand(10),'y')

これは私に次のようなものを与えます:

セカンダリ y 軸の共有に失敗した 2 つのサブプロットの例

共有 y 軸を設定するためにaxes()関数を使用した理由は、 twinxがshareyキーワードを受け入れないためです。

Win7 x64 で Python 3.2 を使用しています。Matplotlib のバージョンは 1.2.0rc2 です。

4

1 に答える 1

53

Axes.get_shared_y_axes()次のように使用できます。

from numpy.random import rand
import matplotlib
matplotlib.use('gtkagg')
import matplotlib.pyplot as plt

# create all axes we need
ax0 = plt.subplot(211)
ax1 = ax0.twinx()
ax2 = plt.subplot(212)
ax3 = ax2.twinx()

# share the secondary axes
ax1.get_shared_y_axes().join(ax1, ax3)

ax0.plot(rand(1) * rand(10),'r')
ax1.plot(10*rand(1) * rand(10),'b')
ax2.plot(3*rand(1) * rand(10),'g')
ax3.plot(10*rand(1) * rand(10),'y')
plt.show()

ここでは、2 番目の軸を結合しているだけです。

それが役立つことを願っています。

于 2012-10-16T22:49:52.273 に答える