ti-enxame.com

definir limites de eixo no matplotlib pyplot

Eu tenho duas subparcelas em uma figura. Quero definir os eixos da segunda subparcela de modo que ela tenha os mesmos limites que a primeira subtrama (que muda dependendo dos valores plotados). Alguém por favor pode me ajudar? Aqui está o 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)

Na segunda subtrama, quais devem ser os argumentos para plt.ylim() function? Eu tentei definir

ymin, ymax = plt.ylim()

na primeira subtrama e depois defina

plt.ylim((ymin,ymax))

na segunda subtrama. Mas isso não funcionou, porque o valor retornado ymax é o valor máximo obtido pela variável y (valor médio) no primeiro sub-gráfico e não o limite superior do eixo y.

Desde já, obrigado.

24
Curious2learn

Pesquisei um pouco mais no site matplotlib e descobri uma maneira de fazê-lo. Se alguém tiver uma maneira melhor, entre em contato.

Na primeira subparcela, substitua plt.subplot(211, axisbg = 'w') por ax1 = plt.subplot(211, axisbg = 'w'). Em seguida, na segunda subtrama, adicione os argumentos sharex = ax1 e sharey = ax1 para o comando subplot. Ou seja, o segundo comando subplot será exibido agora:

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

Isso resolve o problema. Mas se houver outras alternativas melhores, entre em contato.

12
Curious2learn

Sua solução proposta deve funcionar, especialmente se os gráficos forem interativos (eles permanecerão sincronizados se houver alteração).

Como alternativa, você pode definir manualmente os limites y do segundo eixo para corresponder aos do primeiro eixo. Exemplo:

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

14
Amro