J'aimerais avoir trois parcelles en une seule figure. La figure doit avoir une disposition de sous-parcelles de deux par deux, où le premier tracé doit occuper les deux premières cellules de sous-tracé (c'est-à-dire toute la première rangée de cellules de tracé) et les autres tracés doivent être positionnés sous le premier dans les cellules 3 et 4. Je sais que matlab permet cela en utilisant la commande subplot comme ça
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-intrigue? La docstring de pyplot.subplot n'en parle pas.
Quelqu'un a une solution simple? Merci d'avance
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 le premier tracé est en réalité un tracé dans la moitié supérieure (la figure n'est divisée qu'en 2 * 1 = 2 cellules), et les deux parcelles plus petites suivantes sont réalisées dans une grille 2 * 2 = 4 cellules. Le troisième argument de subplot()
est la position du tracé à l'intérieur de la grille: par exemple dans le deuxième sous-tracé (subplot(2, 2, 3)
), les axes iront à la troisième section du 2 * 2 matrice c.-à-d. dans le coin inférieur gauche.
Pour occuper plusieurs sous-tracés avec un axe, 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 subplot2grid
module de matplotlib.pyplot
.
tilisation de Gridspec pour créer des dispositions de sous-intrigue multi-colonnes/lignes montre un moyen de le faire avec GridSpec
. Une version simplifiée de l'exemple avec 3 sous-tracés ressemblerait à
import matplotlib.pyplot as plt
fig = plt.figure()
gs = fig.add_gridspec(2,2)
ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])
ax3 = fig.add_subplot(gs[1, :])
plt.show()
Il y a trois options principales dans matplotlib pour faire des tracés séparés dans une figure:
subplot
: accéder au tableau des axes et ajouter des sous-tracésgridspec
: contrôle les propriétés géométriques de la figure sous-jacente ( démo )subplots
: encapsule les deux premiers dans une api pratique ( démo )Jusqu'à présent, les postes ont abordé les deux premières options, mais ils n'ont pas mentionné la troisième, qui est l'approche la plus moderne et basée sur les deux premières options. Voir les documents spécifiques Combinaison de deux sous-tracés en utilisant des sous-tracés et GridSpec .