Noter
Cliquez ici pour télécharger l'exemple de code complet
Aspect boîte d'axes #
Cette démo montre comment définir l'aspect d'une boîte Axes directement via
set_box_aspect
. L'aspect de la boîte est le rapport entre la hauteur des axes et la largeur des axes en unités physiques, indépendamment des limites des données. Ceci est utile par exemple pour produire un tracé carré, indépendant des données qu'il contient, ou pour avoir un tracé habituel avec les mêmes dimensions d'axes à côté d'un tracé d'image avec un aspect (données) fixe.
La liste suivante répertorie quelques cas d'utilisation de set_box_aspect
.
Un axe carré, indépendant des données #
Produisez des axes carrés, quelles que soient les limites de données.
import numpy as np
import matplotlib.pyplot as plt
fig1, ax = plt.subplots()
ax.set_xlim(300, 400)
ax.set_box_aspect(1)
plt.show()
Axes jumelés carrés #
Produire des axes carrés, avec des axes jumeaux. Les axes jumelés reprennent l'aspect boîte du parent.
fig3, ax = plt.subplots()
ax2 = ax.twinx()
ax.plot([0, 10])
ax2.plot([12, 10])
ax.set_box_aspect(1)
plt.show()
Tracé normal à côté de l'image #
Lors de la création d'un tracé d'image avec un aspect de données fixe et la valeur par défaut
adjustable="box"
à côté d'un tracé normal, les axes seraient de hauteur inégale. set_box_aspect
fournit une solution simple à cela en permettant que les axes du tracé normal utilisent les dimensions des images comme aspect de boîte.
Cet exemple montre également que cela constrained_layout
interagit bien avec un aspect de boîte fixe.
fig4, (ax, ax2) = plt.subplots(ncols=2, constrained_layout=True)
np.random.seed(19680801) # Fixing random state for reproducibility
im = np.random.rand(16, 27)
ax.imshow(im)
ax2.plot([23, 45])
ax2.set_box_aspect(im.shape[0]/im.shape[1])
plt.show()
Joint carré/parcelle marginale #
Il peut être souhaitable d'afficher des distributions marginales à côté d'un graphique de données conjointes. Ce qui suit crée un tracé carré avec l'aspect de la boîte des axes marginaux étant égal aux rapports de largeur et de hauteur du gridspec. Cela garantit que tous les axes s'alignent parfaitement, indépendamment de la taille de la figure.
fig5, axs = plt.subplots(2, 2, sharex="col", sharey="row",
gridspec_kw=dict(height_ratios=[1, 3],
width_ratios=[3, 1]))
axs[0, 1].set_visible(False)
axs[0, 0].set_box_aspect(1/3)
axs[1, 0].set_box_aspect(1)
axs[1, 1].set_box_aspect(3/1)
np.random.seed(19680801) # Fixing random state for reproducibility
x, y = np.random.randn(2, 400) * [[.5], [180]]
axs[1, 0].scatter(x, y)
axs[0, 0].hist(x)
axs[1, 1].hist(y, orientation="horizontal")
plt.show()
Joint carré/parcelle marginale #
Lors de la définition de l'aspect de la boîte, vous pouvez également définir l'aspect des données. Ici, nous créons un Axes avec une boîte deux fois plus longue que haute et utilisons un aspect de données "égal" pour son contenu, c'est-à-dire que le cercle reste en fait circulaire.
fig6, ax = plt.subplots()
ax.add_patch(plt.Circle((5, 3), 1))
ax.set_aspect("equal", adjustable="datalim")
ax.set_box_aspect(0.5)
ax.autoscale()
plt.show()
Aspect de boîte pour de nombreuses sous-parcelles #
Il est possible de passer l'aspect box à un Axes à l'initialisation. Ce qui suit crée une grille de sous-parcelles 2 par 3 avec tous les axes carrés.
fig7, axs = plt.subplots(2, 3, subplot_kw=dict(box_aspect=1),
sharex=True, sharey=True, constrained_layout=True)
for i, ax in enumerate(axs.flat):
ax.scatter(i % 3, -((i // 3) - 0.5)*200, c=[plt.cm.hsv(i / 6)], s=300)
plt.show()
Références
L'utilisation des fonctions, méthodes, classes et modules suivants est illustrée dans cet exemple :
Durée totale d'exécution du script : (0 minutes 2,779 secondes)