Comment faire en sorte qu'un axe occupe plusieurs sous-parcelles avec pyplot (Python)
Je voudrais avoir trois parcelles en une seule figure. La figure devrait avoir une disposition de sous-placette de deux par deux, où la première placette devrait occuper les deux premières cellules de sous-placette (c'est-à-dire toute la première rangée de cellules de placette) et les autres placettes devraient être placées sous la première dans les cellules 3 et 4. Je sais que matlab le permet en utilisant la commande subplot comme ceci
subplot(2,2,[1,2]) % the plot will span subplots 1 and 2
Est-il également possible dans pyplot d'avoir un seul axe occupant plus d'une sous-parcelle? Le docstring de pyplot.intrigue secondaire n'en parle pas.
Quelqu'un a une solution facile? Merci d'avance
3 réponses
Vous pouvez simplement faire:
x = numpy.arange(0, 7, 0.01)
subplot(2, 1, 1)
plot(x, sin(x))
subplot(2, 2, 3)
plot(x, cos(x))
subplot(2, 2, 4)
plot(x, sin(x)*cos(x))
C'est-à-dire que la première parcelle est vraiment une parcelle dans la moitié supérieure (la figure est seulement divisée en 2*1 = 2 cellules), et les deux plus petites parcelles suivantes sont faites dans une grille de cellules 2*2=4.
Le troisième argument de subplot()
est la position du tracé à l'intérieur de la grille:
par exemple, dans la deuxième sous-parcelle (subplot(2, 2, 3)
), les axes iront à la troisième section de la matrice 2*2, c'est-à-dire dans le coin inférieur gauche.
Pour avoir plusieurs sous-parcelles avec un axe occupé, vous pouvez simplement faire:
from matplotlib import pyplot as plt
import numpy as np
b=np.linspace(-np.pi, np.pi, 100)
a1=np.sin(b)
a2=np.cos(b)
a3=a1*a2
plt.subplot(221)
plt.plot(b, a1)
plt.title('sin(x)')
plt.subplot(222)
plt.plot(b, a2)
plt.title('cos(x)')
plt.subplot(212)
plt.plot(b, a3)
plt.title('sin(x)*cos(x)')
plt.show()
Une autre façon est
plt.subplot(222)
plt.plot(b, a1)
plt.title('sin(x)')
plt.subplot(224)
plt.plot(b, a2)
plt.title('cos(x)')
plt.subplot(121)
plt.plot(b, a3)
plt.title('sin(x)*cos(x)')
plt.show()
Pour un contrôle plus fin, vous pouvez utiliser le module subplot2grid
de matplotlib.pyplot
.