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

23
demandé sur Eric Lebigot 2010-02-15 13:42:14

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.

35
répondu Eric Lebigot 2015-05-29 04:01:53

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()

entrez la description de l'image ici

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()

entrez la description de l'image ici

23
répondu Hooshmand zandi 2014-01-23 21:50:12

Pour un contrôle plus fin, vous pouvez utiliser le module subplot2grid de matplotlib.pyplot.

Http://matplotlib.org/users/gridspec.html

7
répondu A.Wan 2014-07-14 22:51:01