Introducción
Matplotlib es una biblioteca de trazado para el lenguaje de programación Python y su extensión matemática numérica NumPy. Una de las características de Matplotlib es la capacidad de crear estilos de caja personalizados.
En este laboratorio, aprenderá a implementar estilos de caja personalizados en Matplotlib. Aprenderá a crear un estilo de caja personalizado como una función y como una clase. También aprenderá a registrar un estilo de caja personalizado con Matplotlib.
Consejos sobre la VM
Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.
A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.
Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.
Implementar un estilo de caja personalizado como una función
Los estilos de caja personalizados se pueden implementar como funciones que tomen argumentos que especifiquen una caja rectangular y la cantidad de "mutación", y devuelvan la ruta "mutada". Aquí, implementaremos un estilo de caja personalizado que devuelva una nueva ruta que agrega una forma de "flecha" a la izquierda de la caja.
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):
"""
Dada la ubicación y el tamaño de la caja, devuelve la ruta de la caja alrededor
de ella.
La rotación se maneja automáticamente.
Parámetros
----------
x0, y0, width, height : float
Ubicación y tamaño de la caja.
mutation_size : float
Escala de referencia de mutación, generalmente el tamaño de fuente del texto.
"""
## padding
mypad = 0.3
pad = mutation_size * mypad
## width and height with padding added.
width = width + 2 * pad
height = height + 2 * pad
## boundary of the padded box
x0, y0 = x0 - pad, y0 - pad
x1, y1 = x0 + width, y0 + height
## return the new path
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()
Implementar un estilo de caja personalizado como una clase
Los estilos de caja personalizados también se pueden implementar como clases que implementen __call__. Las clases luego se pueden registrar en el diccionario BoxStyle._style_list, lo que permite especificar el estilo de caja como una cadena, bbox=dict(boxstyle="nombre_registrado,param=valor,...",...).
class MyStyle:
"""Una caja simple."""
def __init__(self, pad=0.3):
"""
Los argumentos deben ser números de punto flotante y tener valores predeterminados.
Parámetros
----------
pad : float
Cantidad de relleno
"""
self.pad = pad
super().__init__()
def __call__(self, x0, y0, width, height, mutation_size):
"""
Dada la ubicación y el tamaño de la caja, devuelve la ruta de la caja
alrededor de ella.
La rotación se maneja automáticamente.
Parámetros
----------
x0, y0, width, height : float
Ubicación y tamaño de la caja.
mutation_size : float
Escala de referencia para la mutación, generalmente el tamaño de fuente del texto.
"""
## padding
pad = mutation_size * self.pad
## width and height with padding added
width = width + 2.*pad
height = height + 2.*pad
## boundary of the padded box
x0, y0 = x0 - pad, y0 - pad
x1, y1 = x0 + width, y0 + height
## return the new path
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 ## Registra el estilo personalizado.
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"] ## Elimina el registro.
plt.show()
Registrar el estilo de caja personalizado con Matplotlib
Una vez que haya implementado un estilo de caja personalizado como una clase, puede registrarlo con Matplotlib. Esto le permite especificar el estilo de caja como una cadena, bbox=dict(boxstyle="nombre_registrado,param=valor,...",...).
BoxStyle._style_list["angled"] = MyStyle ## Registra el estilo personalizado.
Usar el estilo de caja personalizado
Una vez que haya implementado y registrado un estilo de caja personalizado, puede usarlo con 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))
Resumen
En este laboratorio, aprendiste cómo implementar estilos de caja personalizados en Matplotlib. Aprendiste cómo crear un estilo de caja personalizado como una función y como una clase. También aprendiste cómo registrar un estilo de caja personalizado con Matplotlib y cómo usarlo con Axes.text.