Rotation de texte dans Matplotlib

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

Dans ce laboratoire, vous allez apprendre à faire tourner le texte dans Matplotlib en utilisant le paramètre rotation_mode. Le paramètre rotation_mode détermine l'ordre de rotation et d'alignement du texte. Deux modes sont disponibles : default et anchor.

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 Notebook pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

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

Tout d'abord, nous devons importer les bibliothèques nécessaires. Dans ce laboratoire, nous utiliserons Matplotlib pour créer les graphiques.

import matplotlib.pyplot as plt

Définissez la fonction test_rotation_mode

Nous allons créer une fonction appelée test_rotation_mode qui créera des sous-graphiques pour tester les différents modes de rotation. Elle prend deux paramètres : fig et mode.

def test_rotation_mode(fig, mode):

Définissez les listes d'alignement horizontal et vertical

Ensuite, nous allons définir les listes d'alignement horizontal et vertical qui seront utilisées pour créer les sous-graphiques. Nous allons créer trois éléments pour chaque liste : "left" (gauche), "center" (centre) et "right" (droite) pour l'alignement horizontal, et "top" (haut), "center" (centre) et "bottom" (bas) pour l'alignement vertical.

ha_list = ["left", "center", "right"]
va_list = ["top", "center", "baseline", "bottom"]

Créez les sous-graphiques

Maintenant, nous allons créer les sous-graphiques en utilisant la fonction subplots. Nous allons créer une grille de sous-graphiques avec le même rapport d'aspect, et nous allons supprimer les graduations de l'axe x et de l'axe y. Nous ajouterons également une ligne verticale et une ligne horizontale au centre de chaque sous-graphique pour aider à visualiser l'alignement.

axs = fig.subplots(len(va_list), len(ha_list), sharex=True, sharey=True,
                   subplot_kw=dict(aspect=1),
                   gridspec_kw=dict(hspace=0, wspace=0))

for i, va in enumerate(va_list):
    for j, ha in enumerate(ha_list):
        ax = axs[i, j]
        ax.set(xticks=[], yticks=[])
        ax.axvline(0.5, color="skyblue", zorder=0)
        ax.axhline(0.5, color="skyblue", zorder=0)
        ax.plot(0.5, 0.5, color="C0", marker="o", zorder=1)

Ajoutez du texte aux sous-graphiques

Nous allons ajouter du texte à chaque sous-graphique en utilisant la fonction text. Nous utiliserons les paramètres rotation (rotation), horizontalalignment (alignement horizontal), verticalalignment (alignement vertical) et rotation_mode (mode de rotation) pour faire tourner et aligner le texte. Nous utiliserons également le paramètre bbox (boîte englobante) pour souligner la boîte englobante du texte.

kw = (
    {} if mode == "default" else
    {"bbox": dict(boxstyle="square,pad=0.", ec="none", fc="C1", alpha=0.3)}
)

texts = {}

for i, va in enumerate(va_list):
    for j, ha in enumerate(ha_list):
        ax = axs[i, j]
        tx = ax.text(0.5, 0.5, "Tpg",
                     size="x-large", rotation=40,
                     horizontalalignment=ha, verticalalignment=va,
                     rotation_mode=mode, **kw)
        texts[ax] = tx

Souligner la boîte englobante du texte

Si le rotation_mode est défini sur 'default', nous allons souligner la boîte englobante du texte à l'aide d'un rectangle. Nous utiliserons la fonction get_window_extent pour obtenir la boîte englobante et la transformer en coordonnées de données à l'aide de l'attribut transData.

if mode == "default":
    fig.canvas.draw()
    for ax, text in texts.items():
        bb = text.get_window_extent().transformed(ax.transData.inverted())
        rect = plt.Rectangle((bb.x0, bb.y0), bb.width, bb.height,
                             facecolor="C1", alpha=0.3, zorder=2)
        ax.add_patch(rect)

Créez les sous-figures et appelez la fonction test_rotation_mode

Nous allons créer deux sous-figures et appeler la fonction test_rotation_mode avec les paramètres fig et mode.

fig = plt.figure(figsize=(8, 5))
subfigs = fig.subfigures(1, 2)
test_rotation_mode(subfigs[0], "default")
test_rotation_mode(subfigs[1], "anchor")
plt.show()

Récapitulatif

Dans ce laboratoire, nous avons appris à faire tourner du texte dans Matplotlib en utilisant le paramètre rotation_mode. Nous avons créé une fonction appelée test_rotation_mode qui a créé des sous-graphiques pour tester les différents modes de rotation. Nous avons défini les listes d'alignement horizontal et vertical, créé les sous-graphiques, ajouté du texte aux sous-graphiques et souligné la boîte englobante du texte. Enfin, nous avons créé les sous-figures et appelé la fonction test_rotation_mode.