Introduction
Matplotlib est une bibliothèque de tracé pour le langage de programmation Python et son extension Numérique Mathématique NumPy. L'une des caractéristiques de Matplotlib est la capacité à créer des styles de boîte personnalisés.
Dans ce laboratoire, vous allez apprendre à implémenter des styles de boîte personnalisés dans Matplotlib. Vous allez apprendre à créer un style de boîte personnalisé sous forme de fonction et sous forme de classe. Vous allez également apprendre à enregistrer un style de boîte personnalisé avec Matplotlib.
Conseils sur la VM
Une fois le démarrage de la VM 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 des commentaires après la session, et nous résoudrons rapidement le problème pour vous.
Implémenter un style de boîte personnalisé sous forme de fonction
Les styles de boîte personnalisés peuvent être implémentés sous forme de fonctions qui prennent des arguments spécifiant à la fois une boîte rectangulaire et la quantité de "mutation", et renvoient le chemin "muté". Ici, nous allons implémenter un style de boîte personnalisé qui renvoie un nouveau chemin qui ajoute une forme "flèche" à gauche de la boîte.
import matplotlib.pyplot as plt
from matplotlib.patches import BoxStyle
from matplotlib.path import Path
def custom_box_style(x0, y0, width, height, mutation_size):
"""
Étant donné l'emplacement et la taille de la boîte, renvoie le chemin de la boîte autour
de celle-ci.
La rotation est automatiquement prise en compte.
Paramètres
----------
x0, y0, width, height : float
Emplacement et taille de la boîte.
mutation_size : float
Échelle de référence de mutation, généralement la taille de police du texte.
"""
## padding
mypad = 0.3
pad = mutation_size * mypad
## largeur et hauteur avec padding ajouté.
width = width + 2 * pad
height = height + 2 * pad
## limite de la boîte avec padding
x0, y0 = x0 - pad, y0 - pad
x1, y1 = x0 + width, y0 + height
## renvoie le nouveau chemin
return Path([(x0, y0),
(x1, y0), (x1, y1), (x0, y1),
(x0-pad, (y0+y1)/2), (x0, y0),
(x0, y0)],
closed=True)
fig, ax = plt.subplots(figsize=(3, 3))
ax.text(0.5, 0.5, "Test", size=30, va="center", ha="center", rotation=30,
bbox=dict(boxstyle=custom_box_style, alpha=0.2))
plt.show()
Implémenter un style de boîte personnalisé sous forme de classe
Les styles de boîte personnalisés peuvent également être implémentés sous forme de classes qui implémentent __call__. Les classes peuvent ensuite être enregistrées dans le dictionnaire BoxStyle._style_list, ce qui permet de spécifier le style de boîte sous forme de chaîne de caractères, bbox=dict(boxstyle="nom_enregistré,param=valeur,...",...).
class MyStyle:
"""Une simple boîte."""
def __init__(self, pad=0.3):
"""
Les arguments doivent être des nombres flottants et avoir des valeurs par défaut.
Paramètres
----------
pad : float
Quantité de padding
"""
self.pad = pad
super().__init__()
def __call__(self, x0, y0, width, height, mutation_size):
"""
Étant donné l'emplacement et la taille de la boîte, renvoie le chemin de la boîte
autour de celle-ci.
La rotation est automatiquement prise en compte.
Paramètres
----------
x0, y0, width, height : float
Emplacement et taille de la boîte.
mutation_size : float
Échelle de référence pour la mutation, généralement la taille de police du texte.
"""
## padding
pad = mutation_size * self.pad
## largeur et hauteur avec padding ajouté
width = width + 2.*pad
height = height + 2.*pad
## limite de la boîte avec padding
x0, y0 = x0 - pad, y0 - pad
x1, y1 = x0 + width, y0 + height
## renvoie le nouveau chemin
return Path([(x0, y0),
(x1, y0), (x1, y1), (x0, y1),
(x0-pad, (y0+y1)/2.), (x0, y0),
(x0, y0)],
closed=True)
BoxStyle._style_list["angled"] = MyStyle ## Enregistre le style personnalisé.
fig, ax = plt.subplots(figsize=(3, 3))
ax.text(0.5, 0.5, "Test", size=30, va="center", ha="center", rotation=30,
bbox=dict(boxstyle="angled,pad=0.5", alpha=0.2))
del BoxStyle._style_list["angled"] ## Désenregistre-le.
plt.show()
Enregistrer le style de boîte personnalisé avec Matplotlib
Une fois que vous avez implémenté un style de boîte personnalisé sous forme de classe, vous pouvez l'enregistrer avec Matplotlib. Cela vous permet de spécifier le style de boîte sous forme de chaîne de caractères, bbox=dict(boxstyle="nom_enregistré,param=valeur,...",...).
BoxStyle._style_list["angled"] = MyStyle ## Enregistre le style personnalisé.
Utiliser le style de boîte personnalisé
Une fois que vous avez implémenté et enregistré un style de boîte personnalisé, vous pouvez l'utiliser avec Axes.text.
fig, ax = plt.subplots(figsize=(3, 3))
ax.text(0.5, 0.5, "Test", size=30, va="center", ha="center", rotation=30,
bbox=dict(boxstyle="angled,pad=0.5", alpha=0.2))
Récapitulatif
Dans ce laboratoire, vous avez appris à implémenter des styles de boîte personnalisés dans Matplotlib. Vous avez appris à créer un style de boîte personnalisé sous forme de fonction et sous forme de classe. Vous avez également appris à enregistrer un style de boîte personnalisé avec Matplotlib et à l'utiliser avec Axes.text.