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)
où 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()
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()
.