2010-09-05 15 views
23

Ich habe zwei Teilplots in einer Figur. Ich möchte die Achsen des zweiten Teilplots so einstellen, dass sie die gleichen Grenzen wie der erste Teilplot haben (der sich abhängig von den aufgetragenen Werten ändert). Kann mir bitte jemand helfen? Hier ist der Code:Achsengrenzen in Matplotlib pyplot setzen

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) 

Im zweiten subplot, was die Argumente für plt.ylim() Funktion sein sollte? Ich versuchte

ymin, ymax = plt.ylim() 

in der ersten Teilfläche definieren, und setzte dann

plt.ylim((ymin,ymax)) 

im zweiten subplot. Aber das hat nicht funktioniert, weil der zurückgegebene Wert ymax der Maximalwert ist, der von der y Variable (Mittelwert) im ersten Teilplot und nicht vom oberen Grenzwert der y-Achse genommen wird.

Vielen Dank im Voraus.

Antwort

12

Ich suchte ein wenig mehr auf der Matplotlib-Website und fand einen Weg, es zu tun. Wenn jemand einen besseren Weg hat, lass es mich wissen.

Im ersten Teilplotter plt.subplot(211, axisbg = 'w') durch ax1 = plt.subplot(211, axisbg = 'w') ersetzen. Fügen Sie dann im zweiten Teildiagramm die Argumente sharex = ax1 und sharey = ax1 dem Unterplot-Befehl hinzu. Das heißt, der zweite Unterplot-Befehl sieht nun folgendermaßen aus:

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

Dies löst das Problem. Aber wenn es andere bessere Alternativen gibt, lass es mich wissen.

13

Ihre vorgeschlagene Lösung sollte funktionieren, besonders wenn die Plots interaktiv sind (sie bleiben synchron, wenn sich jemand ändert).

Alternativ können Sie die y-Grenzen der zweiten Achse manuell so einstellen, dass sie der ersten Achse entspricht. Beispiel:

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

Verwandte Themen