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.