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()
aspect boîte d'axes

Axes carrés partagés #

Produisez des sous-parcelles partagées de taille carrée.

fig2, (ax, ax2) = plt.subplots(ncols=2, sharey=True)

ax.plot([1, 5], [0, 10])
ax2.plot([100, 500], [10, 15])

ax.set_box_aspect(1)
ax2.set_box_aspect(1)

plt.show()
aspect boîte d'axes

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()
aspect boîte d'axes

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_aspectfournit 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_layoutinteragit 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()
aspect boîte d'axes

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()
aspect boîte d'axes

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 boîte d'axes

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()
aspect boîte d'axes

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)

Galerie générée par Sphinx-Gallery