86 votes

Quelles sont les différences entre add_axes et add_subplot?

Dans une réponse précédente, il m'a été recommandé d'utiliser add_subplot au lieu de add_axes pour afficher correctement les axes, mais en cherchant dans la documentation, je ne comprenais pas quand et pourquoi je devrais utiliser l'un des deux ces fonctions.

Quelqu'un peut-il expliquer les différences?

163voto

ImportanceOfBeingErnest Points 119438

Les lieux communs

Les deux, add_axes et add_subplot ajouter un axes d'une figure. Ils reviennent tous les deux un matplotlib.axes.Axes objet.

Cependant, le mécanisme qui est utilisé pour ajouter les axes diffère sensiblement.

add_axes

L'appel de la signature de l' add_axes est add_axes(rect)rect est une liste [x0, y0, width, height] indiquant le point inférieur gauche de la les nouveaux axes de la figure coordonnées (x0,y0) et sa largeur et sa hauteur. Donc, les axes se positionne en coordonnées absolues sur la toile. E. g.

fig = plt.figure()
ax = fig.add_axes([0,0,1,1])

lieux une figure de la toile qui est exactement aussi grande que la toile elle-même.

add_subplot

L'appel de la signature de l' add_subplot ne fournit pas directement la possibilité de placer les axes à une position prédéfinie. Il permet plutôt de préciser les axes doit être situé, selon une intrigue secondaire de la grille. L'habitude et de la façon la plus simple de spécifier cette position est le 3 entier notation,

fig = plt.figure()
ax = fig.add_subplot(231)

Dans cet exemple, une nouvelle axes est créé lors de la première position (1) sur une grille de 2 lignes et 3 colonnes. Pour produire un seul axes, add_subplot(111) seraient utilisées (d'Abord sur la parcelle d'un 1 par 1 intrigue secondaire de la grille).

L'avantage de cette méthode est que matplotlib prend en charge le positionnement exact. Par défaut add_subplot(111) serait de produire un des axes positionnés à l' [0.125,0.11,0.775,0.77] ou similaires, ce qui déjà laisse suffisamment d'espace autour des axes pour le titre et le (cocher)les étiquettes. Cependant, cette position peut également changer en fonction d'autres éléments dans l'intrigue, les titres, etc. Il peut également être réglée à l'aide de pyplot.subplots_adjust(...) ou pyplot.tight_layout().

Dans la plupart des cas, add_subplot serait la méthode préférée pour créer des axes pour des parcelles sur une toile. Seulement dans les cas où le positionnement exact des questions, add_axes pourrait être utile.

Exemple

import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (5,3)

fig = plt.figure()
fig.add_subplot(241)
fig.add_subplot(242)
ax = fig.add_subplot(223)
ax.set_title("subplots")

fig.add_axes([0.77,.3,.2,.6])
ax2 =fig.add_axes([0.67,.5,.2,.3])
fig.add_axes([0.6,.1,.35,.3])
ax2.set_title("random axes")

plt.tight_layout()
plt.show()

enter image description here

Alternative

La façon la plus simple d'obtenir un ou plusieurs sous-intrigues avec leurs poignées est - plt.subplots(). Pour l'un des axes, l'utilisation

fig, ax = plt.subplots()

ou, si plusieurs sous-intrigues sont nécessaires,

fig, axes = plt.subplots(nrows=3, ncols=4)

La question initiale

Dans la question initiale, un des axes a été placé à l'aide de fig.add_axes([0,0,1,1]), telle qu'elle est serrée à la figure limites. L'inconvénient est bien sûr que les tiques, ticklabels, axes, les étiquettes et les titres sont coupés. Donc je l'ai suggéré dans un commentaire à la réponse à utiliser fig.add_subplot que cela va automatiquement offrir suffisamment d'espace pour ces éléments, et, si ce n'est pas assez, peut être ajustée à l'aide de pyplot.subplots_adjust(...) ou pyplot.tight_layout().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X