Tengo dos subparcelas en una figura. Quiero establecer los ejes de la segunda trama secundaria de modo que tenga los mismos límites que la primera trama secundaria (que cambia según los valores representados). ¿Puede alguien ayudarme por favor? Aquí está el código:
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 subparcela, ¿cuáles deberían ser los argumentos para plt.ylim()
¿función? Traté de definir
ymin, ymax = plt.ylim()
en la primera subparcela y luego establecer
plt.ylim((ymin,ymax))
en la segunda subparcela. Pero eso no funcionó, porque el valor devuelto ymax
es el valor máximo tomado por el y
variable (valor medio) en la primera subparcela y no el límite superior del eje y.
Gracias por adelantado.
Respuestas
13 para la respuesta № 1Su solución propuesta debería funcionar, especialmente si los gráficos son interactivos (se mantendrán sincronizados si uno cambia).
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()
12 para la respuesta № 2
Busqué más en el sitio web de matplotlib y encontré una manera de hacerlo. Si alguien tiene una mejor manera, por favor hágamelo saber.
En la primera subparcela reemplazar plt.subplot(211, axisbg = "w")
por ax1 = plt.subplot(211, axisbg = "w")
. Luego, en la segunda subparcela, agrega los argumentos sharex = ax1
y sharey = ax1
al comando subplot. Es decir, el segundo comando de subplot ahora se verá:
plt.subplot(212, sharex = ax1, sharey = ax1)
Esto resuelve el problema. Pero si hay otras alternativas mejores, por favor hágamelo saber.