Introduction
Matplotlib est une bibliothèque puissante pour créer des visualisations en Python. Parfois, lors de la création de graphiques, vous devrez peut-être ajuster manuellement les paramètres des sous-graphiques. Ce laboratoire vous montrera comment ajuster programmatiquement les paramètres des sous-graphiques en fonction de la taille des étiquettes.
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 pratiquer.
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.
Importez les bibliothèques nécessaires
Nous aurons besoin de matplotlib.pyplot et de matplotlib.transforms pour créer le graphique et manipuler les paramètres des sous-graphiques.
import matplotlib.pyplot as plt
import matplotlib.transforms as mtransforms
Créez le graphique
Créeons un graphique linéaire simple avec quelques étiquettes de l'axe des ordonnées longues.
fig, ax = plt.subplots()
ax.plot(range(10))
ax.set_yticks([2, 5, 7], labels=['really, really, really', 'long', 'labels'])
Définissez la fonction de rappel de dessin
Nous allons définir une fonction qui sera appelée chaque fois que le graphique est dessiné. Cette fonction calculera les boîtes englobantes des étiquettes de l'axe des ordonnées, déterminera si le sous-graphique laisse suffisamment de place pour les étiquettes et ajustera les paramètres du sous-graphique si nécessaire.
def on_draw(event):
bboxes = []
for label in ax.get_yticklabels():
## Boîte englobante en pixels
bbox_px = label.get_window_extent()
## Transformer en coordonnées relatives de la figure. Ceci est l'inverse de
## transFigure.
bbox_fig = bbox_px.transformed(fig.transFigure.inverted())
bboxes.append(bbox_fig)
## la boîte englobante qui englobe toutes les boîtes englobantes, encore en coordonnées relatives de la figure
bbox = mtransforms.Bbox.union(bboxes)
if fig.subplotpars.left < bbox.width:
## Décaler le bord gauche du sous-graphique plus à droite
fig.subplots_adjust(left=1.1*bbox.width) ## ajouter un peu d'espace
fig.canvas.draw()
Connectez l'événement de dessin à la fonction de rappel
Nous devons connecter l'événement draw_event à notre fonction on_draw.
fig.canvas.mpl_connect('draw_event', on_draw)
Affichez le graphique
Enfin, nous allons afficher le graphique.
plt.show()
Récapitulatif
Dans ce laboratoire, nous avons appris à ajuster programmatiquement les paramètres des sous-graphiques en fonction de la taille des étiquettes. Nous avons utilisé le module matplotlib.transforms pour calculer les boîtes englobantes des étiquettes et l'événement draw_event pour appeler notre fonction on_draw.