Grafica animada – Datos Serial

El ejemplo usa datos aleatorios para presentar una forma de realizar gráficos en vivo usando la librería matplotlib.

Los datos pueden ser obtenidos de algún experimento que envia datos al computador por el puerto serial, ver ejemplos en la sección Arduino.  Como los datos podrían aumentar en el tiempo, se selecciona un tamaño de ventada de datos a graficar.

El tiempo entre tramas o actualizaciones del gráfico se puede controlar con la variable «retraso» que está dada en milisegundos.

Los valores usados en la gráfica son xi,yi semejantes a lo usado en el curso de análisis Numérico (MATG1013) .

# Grafica "en vivo" para actualizar datos
# recibidos por puerto serial
# Plantilla para proyecto, datos de prueba aleatorios

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import random as rnd

# Datos a graficar
xi = []
yi = []

# ventana de datos para gráfico
tamano = 20
# tiempo entre tramas
retraso = 1000

# GRAFICA figura
figura = plt.figure()
grafica = figura.add_subplot(1, 1, 1)

# Nueva Trama
def unatrama(i, xi, yi):

    # Recibe un dato nuevo
    undato = int(rnd.random()*20)+1

    # actualiza cada linea
    yi.append(undato)
    xi.append(len(yi)) # numero del dato ejemplo

    # ventana de datos
    xi = xi[-tamano:]
    yi = yi[-tamano:]

    # limpia y grafica de nuevo
    grafica.clear()
    grafica.plot(xi, yi)

    # Presenta valores en pantalla
    print(yi)
    
    return()

# Animación
ani = animation.FuncAnimation(figura,
                              unatrama,
                              fargs=(xi, yi),
                              interval=retraso)

plt.show()

En la función unatrama(), la variable i en la función es el número de trama. La variable i es un parámetro necesario para la función que se incrementa automáticamente en uno cada vez que se llama a la función unatrama(). Los demás parámetros se adaptan a los datos del problema.

Se pueden añadir otros elementos a la grafica, como títulos, etiquetas, otras líneas, etc. Adicionalmente el procesamiento de los datos se puede incorporar y presentar en la pantalla de texto al final de la función.

Referencia:
https://learn.sparkfun.com/tutorials/graph-sensor-data-with-python-and-matplotlib/update-a-graph-in-real-time

Publicado por

Edison Del Rosario

edelros@espol.edu.ec / Profesor del FIEC/FCNM-ESPOL