J'ai deux sous-intrigues dans une figure. Je veux définir les axes du deuxième sous-tracé de telle sorte qu'il ait les mêmes limites que le premier sous-tracé (qui change en fonction des valeurs tracées). Quelqu'un peut-il m'aider? Voici le code:
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)
Dans la deuxième sous-intrigue, quels devraient être les arguments de la fonction plt.ylim()
? J'ai essayé de définir
ymin, ymax = plt.ylim()
dans le premier sous-tracé, puis définissez
plt.ylim((ymin,ymax))
dans la deuxième sous-intrigue. Mais cela n'a pas fonctionné, car la valeur renvoyée ymax
est la valeur maximale prise par la variable y
(valeur moyenne) dans le premier sous-tracé et non la limite supérieure de l'axe des y.
Merci d'avance.
J'ai cherché un peu plus sur le site Web de matplotlib et j'ai trouvé un moyen de le faire. Si quelqu'un a un meilleur moyen, faites-le moi savoir.
Dans le premier sous-tracé, remplacez plt.subplot(211, axisbg = 'w')
par ax1 = plt.subplot(211, axisbg = 'w')
. Ensuite, dans le deuxième sous-tracé, ajoutez les arguments sharex = ax1
et sharey = ax1
à la commande subplot. Autrement dit, la deuxième commande de sous-tracé ressemblera maintenant:
plt.subplot(212, sharex = ax1, sharey = ax1)
Cela résout le problème. Mais s'il existe d'autres meilleures alternatives, faites-le moi savoir.
La solution que vous proposez devrait fonctionner, surtout si les tracés sont interactifs (ils resteront synchronisés si l'un change).
Comme alternative, vous pouvez définir manuellement les limites y du deuxième axe pour qu'elles correspondent à celles du premier. Exemple:
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()