Est-il possible de définir la taille/la position d'une sous-parcelle matplotlib après la création des axes? Je sais que je peux faire:
import matplotlib.pyplot as plt
ax = plt.subplot(111)
ax.change_geometry(3,1,1)
mettre les axes sur la rangée supérieure de trois. Mais je veux que les axes couvrent les deux premières lignes. J'ai essayé ceci:
import matplotlib.gridspec as gridspec
ax = plt.subplot(111)
gs = gridspec.GridSpec(3,1)
ax.set_subplotspec(gs[0:2])
mais les axes remplissent encore toute la fenêtre.
Mettre à jour pour plus de clarté Je souhaite modifier la position d'une instance d'axes existante plutôt que de la définir lors de sa création. En effet, l'étendue des axes sera modifiée à chaque fois que j'ajouterai des données (données de tracé sur une carte à l'aide de cartopy). La carte peut être haute ou étroite, ou courte et large (ou entre les deux). La décision sur la disposition de la grille sera donc prise après la fonction de traçage.
Grâce à Molly qui me dirige dans la bonne direction, j'ai une solution:
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
fig = plt.figure()
ax = fig.add_subplot(111)
gs = gridspec.GridSpec(3,1)
ax.set_position(gs[0:2].get_position(fig))
ax.set_subplotspec(gs[0:2]) # only necessary if using tight_layout()
fig.add_subplot(gs[2])
fig.tight_layout() # not strictly part of the question
plt.show()
Vous pouvez créer une figure avec une sous-parcelle s'étendant sur deux lignes et une sous-parcelle sur une ligne à l'aide de l'argument rowspan
de subplot2grid :
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = plt.subplot2grid((3,1), (0,0), rowspan=2)
ax2 = plt.subplot2grid((3,1), (2,0))
plt.show()
Si vous souhaitez modifier la taille et la position de la sous-parcelle après sa création, vous pouvez utiliser la méthode set_position .
ax1.set_position([0.1,0.1, 0.5, 0.5])
Mais vous n’avez pas besoin de cela pour créer la figure que vous avez décrite.
Vous pouvez éviter ax.set_position()
en utilisant plutôt fig.tight_layout()
qui recalcule le nouveau gridspec:
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
# create the first axes without knowing of further subplot creation
fig, ax = plt.subplots()
ax.plot(range(5), 'o-')
# now update the existing gridspec ...
gs = gridspec.GridSpec(3, 1)
ax.set_subplotspec(gs[0:2])
# ... and recalculate the positions
fig.tight_layout()
# add a new subplot
fig.add_subplot(gs[2])
fig.tight_layout()
plt.show()