Controlar programáticamente el ajuste de subgráficos

Beginner

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

Introducción

Matplotlib es una poderosa biblioteca para crear visualizaciones en Python. A veces, al crear gráficos, es posible que necesites ajustar manualmente los parámetros de los subgráficos. Esta práctica te mostrará cómo ajustar programáticamente los parámetros de los subgráficos en función del tamaño de las etiquetas.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haz 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 tengas 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 tienes problemas durante el aprendizaje, no dudes en preguntar a Labby. Proporciona retroalimentación después de la sesión y te resolveremos el problema inmediatamente.

Importar las bibliotecas necesarias

Necesitaremos matplotlib.pyplot y matplotlib.transforms para crear el gráfico y manipular los parámetros de los subgráficos.

import matplotlib.pyplot as plt
import matplotlib.transforms as mtransforms

Crear el gráfico

Vamos a crear un gráfico de líneas simple con algunas etiquetas de eje y largas.

fig, ax = plt.subplots()
ax.plot(range(10))
ax.set_yticks([2, 5, 7], labels=['really, really, really', 'long', 'labels'])

Definir la función de devolución de llamada de dibujo

Definiremos una función que se llamará cada vez que se dibuje el gráfico. Esta función calculará los cuadros delimitadores de las etiquetas del eje y, determinará si el subgráfico deja suficiente espacio para las etiquetas y ajustará los parámetros del subgráfico si es necesario.

def on_draw(event):
    bboxes = []
    for label in ax.get_yticklabels():
        ## Bounding box in pixels
        bbox_px = label.get_window_extent()
        ## Transform to relative figure coordinates. This is the inverse of
        ## transFigure.
        bbox_fig = bbox_px.transformed(fig.transFigure.inverted())
        bboxes.append(bbox_fig)
    ## the bbox that bounds all the bboxes, again in relative figure coords
    bbox = mtransforms.Bbox.union(bboxes)
    if fig.subplotpars.left < bbox.width:
        ## Move the subplot left edge more to the right
        fig.subplots_adjust(left=1.1*bbox.width)  ## pad a little
        fig.canvas.draw()

Conectar el evento de dibujo a la función de devolución de llamada

Necesitamos conectar el draw_event a nuestra función on_draw.

fig.canvas.mpl_connect('draw_event', on_draw)

Mostrar el gráfico

Finalmente, mostraremos el gráfico.

plt.show()

Resumen

En este laboratorio, aprendimos cómo ajustar programáticamente los parámetros de los subgráficos en función del tamaño de las etiquetas. Utilizamos el módulo matplotlib.transforms para calcular los cuadros delimitadores de las etiquetas y el draw_event para llamar a nuestra función on_draw.