2010-09-05 18 views
23

Mam dwie partycje na rysunku. Chcę ustawić osie drugiego wątku tak, aby miał te same granice co pierwszy wątek (który zmienia się w zależności od narysowanych wartości). Czy ktoś może mi pomóc? Oto kod:ustaw ograniczenia osi w matplotlib pyplot

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) 

W drugim poletko, co powinno być argumenty za plt.ylim() funkcji? Próbowałem definiowania

ymin, ymax = plt.ylim() 

w pierwszym poletko, a następnie ustawić

plt.ylim((ymin,ymax)) 

w drugim poletko. Ale to nie zadziałało, ponieważ zwrócona wartość ymax jest maksymalną wartością przyjętą przez zmienną y (wartość średnia) w pierwszym wątku, a nie w górnym limicie osi Y.

Z góry dziękuję.

Odpowiedz

12

Szukałem trochę więcej na stronie matplotlib i wymyśliłem sposób, aby to zrobić. Jeśli ktoś ma lepszy sposób, proszę dać mi znać.

W pierwszym subpocie zastępuje plt.subplot(211, axisbg = 'w') przez ax1 = plt.subplot(211, axisbg = 'w') . Następnie, w drugim wątku, dodaj argumenty: sharex = ax1 i sharey = ax1 do polecenia subplot. Oznacza to, że polecenie drugiego subplota będzie teraz wyglądać:

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

Rozwiązuje to problem. Ale jeśli istnieją inne lepsze alternatywy, proszę dać mi znać.

13

Twoje proponowane rozwiązanie powinno działać, zwłaszcza jeśli wykresy są interaktywne (pozostaną zsynchronizowane, jeśli jedna się zmieni).

Alternatywnie, można ręcznie ustawić granice y drugiej osi, aby dopasować ją do pierwszej. Przykład:

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

Powiązane problemy