Подтвердить что ты не робот

Как распределить вторичную ось y между подзаговорами в matplotlib

Если у вас есть несколько подзаговоров, содержащих вторичную ось y (созданную с использованием doublex), как вы можете делиться этой вторичной осью y между подзаголовками? Я хочу, чтобы они масштабировались одинаково в автоматическом режиме (поэтому не устанавливайте y-пределы впоследствии вручную). Для первичной оси y это возможно, используя ключевое слово sharey в вызове subplot.

Ниже пример показывает мою попытку, но он не может разделить вторичную ось 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')

Мне это нравится:

Example of two subplots with failed sharing of secondary y-axis

Причина, по которой я использовал функцию axes() для установки общей оси y, заключается в том, что doublex не принимает ключевое слово sharey.

Я использую Python 3.2 на Win7 x64. Версия Matplotlib - 1.2.0rc2.

4b9b3361

Ответ 1

Вы можете использовать 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()

Здесь мы просто соединяем вторичные оси вместе.

Надеюсь, что это поможет.