Introduction
Ce laboratoire vous guidera tout au long du processus de création de différents graphiques en utilisant la méthode set_box_aspect() dans Matplotlib. Cette méthode définit le rapport d'aspect entre la hauteur et la largeur des axes en unités physiques, indépendamment des limites des données. Elle est utile pour produire des graphiques carrés, indépendamment des données qu'ils contiennent, ou pour avoir un graphique habituel avec les mêmes dimensions d'axes à côté d'un graphique d'image avec un aspect (de données) fixe.
Conseils sur la machine virtuelle
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder au carnet Jupyter pour la pratique.
Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.
Un axe carré, indépendant des données
Nous allons produire un axe carré, peu importent les limites des données.
import matplotlib.pyplot as plt
import numpy as np
fig1, ax = plt.subplots()
ax.set_xlim(300, 400)
ax.set_box_aspect(1)
plt.show()
Axe carré partagé
Nous allons produire des sous-graphiques partagés qui ont une 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()
Axes jumeaux carrés
Nous allons produire un axe carré, avec un axe jumeau. L'axe jumeau prend en compte l'aspect de la 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()
Graphique normal à côté d'une image
Lors de la création d'un graphique d'image avec un aspect de données fixe et la valeur par défaut adjustable="box" à côté d'un graphique normal, les axes auraient des hauteurs inégales. set_box_aspect() fournit une solution simple à ce problème en permettant aux axes du graphique normal d'utiliser les dimensions de l'image comme aspect de la boîte. Cet exemple montre également que la mise en page contraignue interagit bien avec un aspect de boîte fixe.
fig4, (ax, ax2) = plt.subplots(ncols=2, layout="constrained")
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()
Graphique conjoint/marginal carré
Il peut être souhaitable d'afficher les distributions marginales à côté d'un graphique de données conjointes. Le code suivant crée un graphique carré avec l'aspect de la boîte des axes marginaux égal aux rapports de largeur et de hauteur de la grille. 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 de la boîte pour de nombreux sous-graphiques
Il est possible de passer l'aspect de la boîte à un Axe lors de l'initialisation. Le code suivant crée une grille de sous-graphiques 2 x 3 avec tous les Axes carrés.
fig7, axs = plt.subplots(2, 3, subplot_kw=dict(box_aspect=1),
sharex=True, sharey=True, layout="constrained")
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()
Sommaire
Ce laboratoire a fourni une vue d'ensemble sur la manière d'utiliser set_box_aspect() dans Matplotlib pour créer différents types de graphiques avec un rapport d'aspect fixe entre la hauteur et la largeur des axes.