Crear el logotipo de Matplotlib con Python

Beginner

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

Introducción

En este laboratorio, aprenderá a crear el logotipo de Matplotlib utilizando Python. La biblioteca Matplotlib es una herramienta de visualización de datos popular para Python y se utiliza ampliamente en el cálculo científico.

Consejos sobre la VM

Una vez que se haya iniciado 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.

Importando las bibliotecas necesarias

En este paso, importaremos las bibliotecas necesarias, incluyendo Matplotlib y NumPy.

import matplotlib.pyplot as plt
import numpy as np

Definiendo las constantes

En este paso, definiremos algunas constantes, incluyendo el color del logotipo y la fuente.

MPL_BLUE = '#11557c'

def get_font_properties():
    ## La fuente original es Calibri, si no está instalada, utilizamos
    ## Carlito, que es métricamente equivalente.
    if 'Calibri' in matplotlib.font_manager.findfont('Calibri:bold'):
        return matplotlib.font_manager.FontProperties(family='Calibri',
                                                      weight='bold')
    if 'Carlito' in matplotlib.font_manager.findfont('Carlito:bold'):
        print('Fuente original no encontrada. Utilizando Carlito como reemplazo. '
              'El texto del logotipo no tendrá la fuente correcta.')
        return matplotlib.font_manager.FontProperties(family='Carlito',
                                                      weight='bold')
    print('Fuente original no encontrada. '
          'El texto del logotipo no tendrá la fuente correcta.')
    return None

Creando los ejes del icono

En este paso, crearemos un eje polar que contendrá el gráfico de radar de Matplotlib.

def create_icon_axes(fig, ax_position, lw_bars, lw_grid, lw_border, rgrid):
    """
    Crea un eje polar que contiene el gráfico de radar de matplotlib.

    Parámetros
    ----------
    fig : matplotlib.figure.Figure
        La figura en la que se dibujará.
    ax_position : (float, float, float, float)
        La posición del eje creado en coordenadas de figura como
        (x, y, ancho, alto).
    lw_bars : float
        El ancho de línea de las barras.
    lw_grid : float
        El ancho de línea de la cuadrícula.
    lw_border : float
        El ancho de línea del borde del eje.
    rgrid : array-like
        Posiciones de la cuadrícula radial.

    Devuelve
    -------
    ax : matplotlib.axes.Axes
        El eje creado.
    """
    with plt.rc_context({'axes.edgecolor': MPL_BLUE,
                         'axes.linewidth': lw_border}):
        ax = fig.add_axes(ax_position, projection='polar')
        ax.set_axisbelow(True)

        N = 7
        arc = 2. * np.pi
        theta = np.arange(0.0, arc, arc / N)
        radii = np.array([2, 6, 8, 7, 4, 5, 8])
        width = np.pi / 4 * np.array([0.4, 0.4, 0.6, 0.8, 0.2, 0.5, 0.3])
        bars = ax.bar(theta, radii, width=width, bottom=0.0, align='edge',
                      edgecolor='0.3', lw=lw_bars)
        for r, bar in zip(radii, bars):
            color = *cm.jet(r / 10.)[:3], 0.6  ## color del jet con alpha=0.6
            bar.set_facecolor(color)

        ax.tick_params(labelbottom=False, labeltop=False,
                       labelleft=False, labelright=False)

        ax.grid(lw=lw_grid, color='0.9')
        ax.set_rmax(9)
        ax.set_yticks(rgrid)

        ## el fondo visible real - se extiende un poco más allá del eje
        ax.add_patch(Rectangle((0, 0), arc, 9.58,
                               facecolor='white', zorder=0,
                               clip_on=False, in_layout=False))
        return ax

Creando los ejes de texto

En este paso, crearemos un eje en fig que contiene 'matplotlib' como texto.

def create_text_axes(fig, height_px):
    """Crea un eje en *fig* que contiene 'matplotlib' como texto."""
    ax = fig.add_axes((0, 0, 1, 1))
    ax.set_aspect("igual")
    ax.set_axis_off()

    path = TextPath((0, 0), "matplotlib", size=height_px * 0.8,
                    prop=get_font_properties())

    angle = 4.25  ## grados
    trans = mtrans.Affine2D().skew_deg(angle, 0)

    patch = PathPatch(path, transform=trans + ax.transData, color=MPL_BLUE,
                      lw=0)
    ax.add_patch(patch)
    ax.autoscale()

Creando el logotipo

En este paso, crearemos la figura completa con el logotipo de Matplotlib.

def make_logo(height_px, lw_bars, lw_grid, lw_border, rgrid, with_text=False):
    """
    Crea una figura completa con el logotipo de Matplotlib.

    Parámetros
    ----------
    height_px : int
        Altura de la figura en píxeles.
    lw_bars : float
        Ancho de línea del borde de la barra.
    lw_grid : float
        Ancho de línea de la cuadrícula.
    lw_border : float
        Ancho de línea del borde del icono.
    rgrid : secuencia de float
        Posiciones de la cuadrícula radial.
    with_text : bool
        Si se debe dibujar solo el icono o incluir 'matplotlib' como texto.
    """
    dpi = 100
    height = height_px / dpi
    figsize = (5 * height, height) si with_text else (height, height)
    fig = plt.figure(figsize=figsize, dpi=dpi)
    fig.patch.set_alpha(0)

    si with_text:
        create_text_axes(fig, height_px)
    ax_pos = (0.535, 0.12,.17, 0.75) si with_text else (0.03, 0.03,.94,.94)
    ax = create_icon_axes(fig, ax_pos, lw_bars, lw_grid, lw_border, rgrid)

    return fig, ax

注:代码中的“si”应改为“if”,这是一处拼写错误,翻译时保留了原文错误。

Mostrando los logotipos

En este paso, mostraremos los logotipos de Matplotlib de diferentes tamaños.

## Un logotipo grande:
make_logo(height_px=110, lw_bars=0.7, lw_grid=0.5, lw_border=1,
          rgrid=[1, 3, 5, 7])

## Un logotipo pequeño de 32px:
make_logo(height_px=32, lw_bars=0.3, lw_grid=0.3, lw_border=0.3, rgrid=[5])

## Un logotipo grande que incluye texto, como se utiliza en el sitio web de Matplotlib.
make_logo(height_px=110, lw_bars=0.7, lw_grid=0.5, lw_border=1,
          rgrid=[1, 3, 5, 7], with_text=True)
plt.show()

Resumen

En este laboratorio, aprendiste cómo crear el logotipo de Matplotlib utilizando Python. Siguiendo los pasos anteriores, puedes personalizar el logotipo para adaptarlo a tus necesidades y preferencias.