Contrôle programmatique de l'ajustement des sous-graphiques

PythonPythonBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

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.