Estilos de caja personalizados en Matplotlib

PythonPythonBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.