Visualización interactiva de datos con Python 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

Esta práctica te guiará sobre cómo interactuar con datos en múltiples lienzos. Al seleccionar y resaltar un punto en un eje, se generarán los datos de ese punto en el otro eje. Para esta práctica, usaremos Python Matplotlib.

Consejos sobre la VM

Una vez que se haya iniciado 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 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 resolveremos rápidamente el problema para ti.

Importar bibliotecas

Comenzaremos importando las bibliotecas necesarias.

import numpy as np
import matplotlib.pyplot as plt

Generar datos

Generaremos datos aleatorios utilizando NumPy.

np.random.seed(19680801)
X = np.random.rand(100, 200)
xs = np.mean(X, axis=1)
ys = np.std(X, axis=1)

Crear figura y ejes

Crearemos una figura con dos ejes.

fig, (ax, ax2) = plt.subplots(2, 1)

Graficar datos

Graficaremos los datos generados en el primer eje.

line, = ax.plot(xs, ys, 'o', picker=True, pickradius=5)

Crearemos una clase para manejar la funcionalidad del navegador de puntos.

class PointBrowser:
    def __init__(self):
        self.lastind = 0

        self.text = ax.text(0.05, 0.95, 'selected: none',
                            transform=ax.transAxes, va='top')
        self.selected, = ax.plot([xs[0]], [ys[0]], 'o', ms=12, alpha=0.4,
                                 color='yellow', visible=False)

    def on_press(self, event):
        if self.lastind is None:
            return
        if event.key not in ('n', 'p'):
            return
        if event.key == 'n':
            inc = 1
        else:
            inc = -1

        self.lastind += inc
        self.lastind = np.clip(self.lastind, 0, len(xs) - 1)
        self.update()

    def on_pick(self, event):

        if event.artist!= line:
            return True

        N = len(event.ind)
        if not N:
            return True

        ## las ubicaciones del clic
        x = event.mouseevent.xdata
        y = event.mouseevent.ydata

        distancias = np.hypot(x - xs[event.ind], y - ys[event.ind])
        indmin = distancias.argmin()
        dataind = event.ind[indmin]

        self.lastind = dataind
        self.update()

    def update(self):
        if self.lastind is None:
            return

        dataind = self.lastind

        ax2.clear()
        ax2.plot(X[dataind])

        ax2.text(0.05, 0.9, f'mu={xs[dataind]:1.3f}\nsigma={ys[dataind]:1.3f}',
                 transform=ax2.transAxes, va='top')
        ax2.set_ylim(-0.5, 1.5)
        self.selected.set_visible(True)
        self.selected.set_data(xs[dataind], ys[dataind])

        self.text.set_text('selected: %d' % dataind)
        fig.canvas.draw()

Conectar manejadores de eventos

Conectaremos los manejadores de eventos al lienzo de la figura.

browser = PointBrowser()

fig.canvas.mpl_connect('pick_event', browser.on_pick)
fig.canvas.mpl_connect('key_press_event', browser.on_press)

Mostrar la gráfica

Mostraremos la gráfica.

plt.show()

Resumen

En este laboratorio, aprendimos cómo interactuar con datos en múltiples lienzos utilizando Python Matplotlib. Creamos una clase para manejar la funcionalidad del navegador de puntos y conectamos los manejadores de eventos al lienzo de la figura para habilitar la interactividad.