Saltar al contenido
Gráficos con Matplotlib

Interactividad con widgets de Matplotlib

Introducción

Matplotlib es una librería de Python ampliamente utilizada para visualizar datos. Ofrece una gran variedad de gráficos y herramientas para personalizar la apariencia de los mismos. Además, cuenta con la posibilidad de incorporar interactividad entre los gráficos y el usuario, desde hacer zoom hasta seleccionar puntos específicos en los mismos.

Uno de los recursos más potentes de esta librería son los widgets, que nos permiten interactuar con nuestros gráficos. Podemos crear widgets de diferentes tipos, desde botones y sliders, hasta menú desplegables, que responderán a los eventos generados por nuestros gráficos.

Al trabajar con widgets de Matplotlib, podemos crear aplicaciones simples y elegantes, que incrementen significativamente la capacidad de análisis de nuestros datos. Como beneficio adicional, estos widgets también facilitan la comunicación de resultados a terceros, permitiendo a nuestros usuarios jugar con los gráficos y descubrir patrones y tendencias en los datos.

En resumen, la incorporación de interactividad en nuestros gráficos a través de widgets de Matplotlib nos permite mejorar nuestra capacidad de análisis y ofrecer presentaciones de datos más claras y eficaces.

Resumen

La interactividad con widgets de Matplotlib se refiere a la capacidad de crear gráficos que pueden actualizarse en tiempo real utilizando elementos interactivos como botones, cuadros de texto y menús desplegables. Aquí tienes un ejemplo práctico de cómo crear un botón que cambia el color de un gráfico:

        
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
import numpy as np

# Definir los datos
x = np.linspace(0, 10, 100)
y = np.sin(x)

# Crear la figura
fig, ax = plt.subplots()

# Graficar los datos
line, = ax.plot(x, y)

# Definir la función que se llamará cuando el botón sea presionado
def cambiar_color(event):
    line.set_color('red')
    fig.canvas.draw()

# Crear el botón y agregarlo a la figura
ax_button = plt.axes([0.7, 0.05, 0.2, 0.075])
button = Button(ax_button, 'Cambiar Color')
button.on_clicked(cambiar_color)

# Mostrar la figura
plt.show()
        
    

En este ejemplo:

  • Importamos las librerías necesarias, incluyendo matplotlib.pyplot y Button de matplotlib.widgets.
  • Definimos datos de ejemplo x y y para graficar una función seno.
  • Creamos una figura y un gráfico de líneas utilizando plt.subplots() y ax.plot().
  • Definimos la función cambiar_color(event) que cambiará el color de la línea a rojo cuando se presione el botón.
  • Creamos un botón utilizando Button(ax_button, 'Cambiar Color') y lo agregamos a la figura utilizando las coordenadas proporcionadas por plt.axes().
  • Conectamos la función cambiar_color al evento de clic del botón utilizando button.on_clicked(cambiar_color).
  • Finalmente, mostramos la figura con plt.show().

Al ejecutar este código, verás una gráfica de una función seno y un botón que, al ser presionado, cambiará el color de la línea a rojo. Este es un ejemplo básico de cómo agregar interactividad a tus gráficos con widgets de Matplotlib.

Aplicación teórica

Una forma común de agregar interactividad a un gráfico con Matplotlib es mediante el uso de widgets, como botones, deslizadores y menús desplegables. Aquí tienes un ejemplo práctico:

        
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
import numpy as np

# Generamos los datos de ejemplo
t = np.linspace(0, 10, 1000)
y = np.sin(2 * np.pi * t)

# Creamos la figura y el gráfico de líneas
fig, ax = plt.subplots()
line, = ax.plot(t, y)

# Creamos la barra deslizante y definimos su función de actualización
axcolor = 'lightgoldenrodyellow'
axinterval = plt.axes([0.2, 0.1, 0.6, 0.03], facecolor=axcolor)
intervalo_inicial = 1.0
slider_interval = Slider(axinterval, 'Intervalo de tiempo', 0.1, 10.0, valinit=intervalo_inicial)

def actualizar(val):
    intervalo = slider_interval.val
    line.set_data(t, np.sin(2 * np.pi * t / intervalo))
    fig.canvas.draw_idle()

slider_interval.on_changed(actualizar)

# Mostramos el gráfico
plt.show()
        
    

En este ejemplo:

  • Importamos las librerías necesarias, incluyendo matplotlib.pyplot y Slider de matplotlib.widgets.
  • Generamos datos de ejemplo para una serie temporal y = sin(2 * π * t).
  • Creamos una figura y un gráfico de líneas con los datos generados.
  • Definimos una barra deslizante (Slider) que permitirá al usuario seleccionar un intervalo de tiempo.
  • Implementamos la función actualizar(val) que actualizará el gráfico cada vez que cambie el valor de la barra deslizante.
  • Conectamos la función de actualización (actualizar) al evento de cambio de la barra deslizante usando slider_interval.on_changed().
  • Finalmente, mostramos el gráfico con plt.show().

Al ejecutar este código, podrás interactuar con la barra deslizante para seleccionar diferentes intervalos de tiempo y ver cómo cambia la serie temporal mostrada en el gráfico.

Aplicación práctica

Aquí se muestra cómo crear una gráfica con Matplotlib y agregar interactividad mediante un widget de selección.

        
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider

# Función para generar datos y graficarlos
def plot_data(a):
    x = np.linspace(0, 2*np.pi, 100)
    y = np.sin(a*x)
    plt.plot(x, y)
    plt.title('Función sin(a*x)')
    plt.xlabel('x')
    plt.ylabel('sin(a*x)')
    plt.grid(True)

# Creamos una figura con ajuste de subplots
fig, ax = plt.subplots()
plt.subplots_adjust(left=0.2, bottom=0.35)

# Creamos el slider para controlar el valor de 'a'
s_a = Slider(ax=ax, label='a', valmin=0.1, valmax=2, valinit=1)
plot_data(1)

# Función de actualización para el slider
def update(val):
    a = s_a.val
    plt.cla()  # Limpiamos la figura actual
    plot_data(a)  # Volvemos a graficar con el nuevo valor de 'a'
    fig.canvas.draw_idle()  # Actualizamos la figura

s_a.on_changed(update)  # Llamamos a update() cada vez que cambia el slider
plt.show()
        
    

En este ejemplo:

  • Importamos las librerías necesarias, incluyendo numpy y matplotlib.pyplot.
  • Definimos la función plot_data(a) para generar datos y graficar la función seno con parámetro a.
  • Utilizamos matplotlib.widgets.Slider para crear un widget de selección que controla el valor de a.
  • Definimos la función update(val) que actualiza la gráfica cada vez que cambia el valor del slider.
  • Utilizamos s_a.on_changed(update) para conectar el evento de cambio del slider con la función de actualización.
  • Finalmente, mostramos la figura con plt.show().

Al ejecutar este código, podrás interactuar con el widget de selección y observar cómo cambia la gráfica en tiempo real según el valor de a.