2010-09-05 34 views
23

Tengo dos subtramas en una figura. Quiero establecer los ejes de la segunda subtrama de modo que tenga los mismos límites que la primera subtrama (que cambia según los valores trazados). ¿Puede alguien ayudarme? Aquí está el código:establecer límites de eje en 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) 

En la segunda subtrama, cuáles deben ser los argumentos para plt.ylim() función? He intentado definir

ymin, ymax = plt.ylim() 

en la primera trama secundaria y después fijar los

plt.ylim((ymin,ymax)) 

en la segunda subtrama. Pero eso no funcionó, porque el valor devuelto ymax es el valor máximo tomado por la variable y (valor medio) en la primera subtrama y no en el límite superior del eje y.

Gracias de antemano.

Respuesta

12

Busqué un poco más en el sitio web matplotlib y pensé en una forma de hacerlo. Si alguien tiene una mejor manera, por favor avíseme.

En la primera subtrama, reemplace plt.subplot(211, axisbg = 'w') por ax1 = plt.subplot(211, axisbg = 'w') . Luego, en la segunda subtrama, agregue los argumentos sharex = ax1 y sharey = ax1 al comando subplot. Es decir, el segundo comando de subtrama ahora se verá:

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

Esto soluciona el problema. Pero si hay otras alternativas mejores, por favor avíseme.

13

Su solución propuesta debería funcionar, especialmente si los gráficos son interactivos (se mantendrán sincronizados si se produce un cambio).

Como alternativa, puede establecer manualmente los límites y del segundo eje para que coincidan con los del primero. Ejemplo:

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

Cuestiones relacionadas