Skip to content

Cómo crear una gráfica interactiva con Matplotlib

Updated on

Crear gráficas estáticas estándar utilizando Python y Matplotlib es un camino bien conocido, con muchas guías y recursos disponibles. Sin embargo, cuando se trata de crear gráficas interactivas, es decir, gráficas en las que se puede hacer zoom, desplazar y actualizar en tiempo real, la información puede ser escasa.

En esta guía completa, desmitificaremos el proceso de creación de gráficas interactivas con Matplotlib. Te mostraremos algunos ejemplos paso a paso, asegurándonos de que tengas todas las habilidades necesarias para crear tus propias visualizaciones interactivas.

Comenzando con las gráficas interactivas en Matplotlib

Antes de comenzar, es importante entender qué es una gráfica interactiva. Una gráfica interactiva, a diferencia de una estática, permite a los usuarios interactuar con los datos en tiempo real. Esto puede significar hacer zoom dentro y fuera de una gráfica, actualizar la gráfica en respuesta a interacciones con widgets, o incluso crear una gráfica dinámica que se actualiza en tiempo real según los datos de entrada.

Para habilitar la interactividad en Matplotlib, necesitamos utilizar ciertos backends que admitan el modo interactivo. El modo predeterminado de Matplotlib es no interactivo y todas las gráficas son estáticas. Para hacer una gráfica interactiva, debemos cambiar a un backend diferente, como 'notebook' o 'widget'.

En los cuadernos de Jupyter, puedes usar el comando mágico %matplotlib notebook para cambiar al backend del cuaderno y hacer tus gráficas interactivas. Este es el primer paso clave para crear gráficas interactivas.

Creando tu primera gráfica interactiva

Ahora que hemos preparado el escenario, vamos a crear nuestra primera gráfica interactiva. Comenzaremos con un ejemplo sencillo: una gráfica de dispersión.

%matplotlib notebook
import matplotlib.pyplot as plt
import numpy as np
 
# Crear una gráfica de dispersión simple
fig, ax = plt.subplots()
x, y = np.random.rand(2, 200)
scatter = ax.scatter(x, y)
 
plt.show()

Cuando ejecutes el código anterior en un cuaderno de Jupyter, verás que tu gráfica es interactiva. Puedes hacer zoom dentro y fuera utilizando la barra de herramientas en la parte inferior de la gráfica.

Creando gráficas interactivas con widgets

El verdadero poder de las gráficas interactivas se encuentra cuando las combinas con widgets. Los widgets permiten a los usuarios interactuar con la gráfica y controlar aspectos de los datos y visualizaciones.

Veamos un ejemplo en el que creamos una gráfica de onda senoidal y usamos un control deslizante para controlar la frecuencia de la onda.

from ipywidgets import interact
import ipywidgets as widgets
 
def plot_func(freq):
    plt.figure()
    x = np.linspace(0, 2*np.pi, 400)
    y = np.sin(x * freq)
    plt.plot(x, y)
    plt.show()
 
interact(plot_func, freq=widgets.FloatSlider(value=7.5, min=1, max=10, step=0.5));

En el fragmento de código anterior, primero definimos una función plot_func que genera una onda senoidal para una frecuencia dada. Luego usamos la función interact de ipywidgets para crear un control deslizante que controla la frecuencia. Cuando ejecutes este código, verás que aparece un control deslizante sobre tu gráfica. A medida que deslices el control deslizante, la frecuencia de la onda senoidal cambia en tiempo real.

Estos ejemplos brindan una introducción a la creación de gráficas interactivas con Matplotlib. En las secciones siguientes, exploraremos ejemplos más complejos y profundizaremos en las funcionalidades de las gráficas interactivas.

Continuando desde donde lo dejamos, adentrémonos más en el fascinante mundo de las capacidades interactivas de Matplotlib.

Mejorando la interactividad con widgets

Los widgets no se limitan a los controles deslizantes. Puedes usar casillas de verificación, menús desplegables, campos de texto y muchos otros. Cada tipo de widget puede estar asociado con diferentes tipos de manipulación de datos. Por ejemplo, un menú desplegable podría usarse para seleccionar qué conjunto de datos mostrar en la gráfica. Los widgets te brindan la flexibilidad para crear visualizaciones realmente interactivas y versátiles.

Actualizando gráficas dinámicamente

Para actualizar gráficas dinámicamente según la interacción del usuario, deberás entender el concepto de eventos en Matplotlib. Los eventos son entradas de los usuarios, como clics de mouse, pulsaciones de teclas o incluso mover el mouse sobre la gráfica. Al capturar y procesar estos eventos, puedes actualizar tus gráficas en respuesta a las entradas del usuario.

Aquí tienes un ejemplo que ilustra cómo puedes usar un evento de clic de botón para agregar nuevos puntos de datos a una gráfica de dispersión:

from matplotlib.widgets import Button
 
fig, ax = plt.subplots()
scatter = ax.scatter(np.random.rand(10), np.random.rand(10))
 
button_ax = plt.axes([0.7, 0.05, 0.1, 0.075])
button = Button(button_ax, 'Agregar')
 
def add_point(event):
    new_point = np.random.rand(2)
    scatter.set_offsets(np.concatenate([scatter.get_offsets(), [new_point]]))
    plt.draw()
 
button.on_clicked(add_point)
 
plt.show()

En este código, estamos creando una gráfica de dispersión y un botón. Cuando se hace clic en el botón, se activa la función add_point, que agrega un nuevo punto de datos aleatorio a la gráfica de dispersión.

Gráficas 3D interactivas

Matplotlib también admite la creación de gráficas 3D interactivas. Esto te permite rotar la gráfica y hacer zoom dentro y fuera para examinar los datos desde diferentes ángulos. Aquí tienes un ejemplo de una gráfica de dispersión 3D:

from mpl_toolkits.mplot3d import Axes3D
 
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
 
x, y, z = np.random.rand(3, 100)
ax.scatter(x, y, z)
 
plt.show()

En esta gráfica, puedes usar el mouse para arrastrar y rotar la gráfica en el espacio 3D, y usar la rueda de desplazamiento para hacer zoom dentro y fuera.

Utilizando estas técnicas, puedes crear una amplia variedad de gráficas interactivas en Matplotlib. Las gráficas interactivas son una herramienta poderosa para el análisis y la visualización de datos, ya que te permiten explorar tus datos de manera más completa e intuitiva.

Alternativa a Matplotlib: Visualizar datos con PyGWalker

Además de usar Matplotlib para visualizar su dataframe en pandas, aquí hay una alternativa: una biblioteca de Python de código abierto que puede ayudarlo a crear visualizaciones de datos con facilidad: PyGWalker (opens in a new tab).

PyGWalker para visualización de datos (opens in a new tab)

¡Ya no es necesario completar procesamientos complicados con código Python! Simplemente importe sus datos y arrastre y suelte variables para crear todo tipo de visualizaciones de datos. Aquí hay un video de demostración rápida sobre cómo funciona:


Así es cómo se utiliza PyGWalker en su Jupyter Notebook:

pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)

Como alternativa, también puedes probarlo en Kaggle Notebook/Google Colab:

Ejecutar PyGWalker en Kaggle Notebook (opens in a new tab)Ejecutar PyGWalker en Google Colab (opens in a new tab)Dale una ⭐️ a PyGWalker en GitHub (opens in a new tab)
Ejecutar PyGWalker en Kaggle Notebook (opens in a new tab)Ejecutar PyGWalker en Google Colab (opens in a new tab)Ejecutar PyGWalker en Google Colab (opens in a new tab)

PyGWalker se basa en el apoyo de nuestra comunidad de código abierto. ¡No olvides visitar PyGWalker en GitHub (opens in a new tab) y darle una estrella!

Preguntas frecuentes

  1. ¿Qué es una gráfica interactiva?
    Una gráfica interactiva es un gráfico que permite a los usuarios interactuar con él. Los usuarios pueden hacer zoom, mover el gráfico e incluso actualizarlo en tiempo real, dependiendo de las características implementadas.

  2. ¿Cómo puedo hacer que mis gráficas de Matplotlib sean interactivas?
    Puedes hacer que tus gráficas de Matplotlib sean interactivas utilizando un backend interactivo como 'notebook' o 'widget'. En un notebook de Jupyter, puedes usar el comando mágico %matplotlib notebook para habilitar el modo interactivo.

  3. ¿Puedo usar widgets para interactuar con mi gráfica de Matplotlib?
    Sí, puedes usar ipywidgets junto con Matplotlib para crear una variedad de funciones interactivas. Estas pueden incluir deslizadores, botones, casillas de verificación y más, que pueden modificar los datos o la apariencia de tu gráfica en tiempo real.