установить пределы оси в pyplot matplotlib - PullRequest
24 голосов
/ 05 сентября 2010

У меня есть два сюжета на рисунке.Я хочу установить оси второго вспомогательного участка так, чтобы он имел те же пределы, что и первый вспомогательный участок (который изменяется в зависимости от отображаемых значений).Может кто-нибудь, пожалуйста, помогите мне?Вот код:

import matplotlib.pyplot as plt

plt.figure(1, figsize = (10, 20))
## First subplot: Mean value in each period (mean over replications)
plt.subplot(211, axisbg = 'w')
plt.plot(time,meanVector[0:xMax], color = '#340B8C', 
         marker = 'x', ms = 4, mec = '#87051B', markevery = (asp, 
                                                             2*asp))
plt.xticks(numpy.arange(0, T+1, jump), rotation = -45)
plt.axhline(y = Results[0], color = '#299967', ls = '--')
plt.ylabel('Mean Value')
plt.xlabel('Time')
plt.grid(True)


## Second subplot: moving average for determining warm-up period
## (Welch method)
plt.subplot(212)    
plt.plot(time[0:len(yBarWvector)],yBarWvector, color = '#340B8C')
plt.xticks(numpy.arange(0, T+1, jump), rotation = -45)
plt.ylabel('yBarW')
plt.xlabel('Time')
plt.xlim((0, T))
plt.grid(True)

Во втором подпункте, какими должны быть аргументы для функции plt.ylim()?Я попытался определить

ymin, ymax = plt.ylim()

в первом субплоте и затем установить

plt.ylim((ymin,ymax))

во втором субплоте.Но это не сработало, потому что возвращаемое значение ymax - это максимальное значение, взятое переменной y (среднее значение) в первом субплоте, а не верхний предел оси y.

Заранее спасибо.

Ответы [ 2 ]

14 голосов
/ 10 сентября 2010

Предлагаемое решение должно работать, особенно если графики являются интерактивными (они будут синхронизированы при изменении).

В качестве альтернативы, вы можете вручную установить пределы y второй оси, чтобы они соответствовалииз первых.Пример:

from pylab import *

x = arange(0.0, 2.0, 0.01)
y1 = 3*sin(2*pi*x)
y2 = sin(2*pi*x)

figure()
ax1 = subplot(211)
plot(x, y1, 'b')

subplot(212)
plot(x, y2, 'g')
ylim( ax1.get_ylim() )        # set y-limit to match first axis

show()

alt text

12 голосов
/ 05 сентября 2010

Я поискал еще на сайте matplotlib и нашел способ сделать это.Если у кого-то есть способ получше, пожалуйста, дайте мне знать.

В первом подзаговоре заменить plt.subplot(211, axisbg = 'w') на ax1 = plt.subplot(211, axisbg = 'w') .Затем во втором вспомогательном участке добавьте аргументы sharex = ax1 и sharey = ax1 к команде вспомогательного участка.То есть вторая команда подзаговора теперь будет выглядеть так:

plt.subplot(212, sharex = ax1, sharey = ax1)

Это решает проблему.Но если есть другие лучшие альтернативы, пожалуйста, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...