Volver al inicio

Construyendo gráficos desde CSV en Python matplotlib

El artículo describe scripts para construir gráficos 2D desde CSV con matplotlib. Ejemplos: gráfico básico, agregar umbral de iluminancia, cuadrícula, leyenda. Ventajas e instalación del paquete.

Gráficos desde CSV: matplotlib en Python con ejemplos
Advertisement 728x90

Visualizar datos CSV con Matplotlib en Python

Un script en Python que usa la biblioteca matplotlib te permite crear visualizaciones rápidamente a partir de archivos CSV. Este ejemplo utiliza un archivo llamado LiLog.csv con columnas para número de fila, nivel de luz (Lx), temperatura, hora, fecha y marca de tiempo Unix. El gráfico representa la marca de tiempo (columna 6) en el eje X y el nivel de luz (columna 2) en el eje Y.

Necesitas Python 3+, matplotlib y el módulo csv integrado. Verifica tu intérprete de Python con where python y usa una instalación limpia, evitando paquetes de Cygwin o Inkscape.

Instala las dependencias:

Google AdInline article slot
pip install matplotlib numpy

Script básico para gráfico de líneas 2D

Este código carga los datos, analiza el CSV y dibuja una línea:

import matplotlib.pyplot as plt
import csv

X = []
Y = []

with open('LiLog.csv', 'r') as datafile:
    plotting = csv.reader(datafile, delimiter=',')  # Coma para este ejemplo
    
    for ROWS in plotting:
        X.append(float(ROWS[5]))
        Y.append(float(ROWS[1]))

plt.plot(X, Y)
plt.title('Gráfico de líneas con CSV')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

Las listas X e Y se llenan con valores flotantes de las columnas indicadas. csv.reader maneja el delimitador (coma en este caso; verifica tu archivo). plt.plot dibuja la línea y show() abre la ventana.

Gráfico avanzado con línea umbral y anotaciones

Agrega una línea umbral horizontal (63 Lx), cuadrícula, leyenda y etiquetas rotadas:

Google AdInline article slot
import matplotlib.pyplot as plt
import csv

X = []
Y = []

with open('LiLog.csv', 'r') as datafile:
    plotting = csv.reader(datafile, delimiter=',')
    
    for ROWS in plotting:
        X.append(float(ROWS[5]))
        Y.append(float(ROWS[1]))

threshold = 63.0
T = [threshold] * len(Y)

plt.plot(X, Y)
plt.plot(X, T)
plt.title('Cambio de iluminación')
plt.xlabel('Tiempo,[s]')
plt.ylabel('Nivel de luz, [Lx]')
plt.grid()
plt.xticks(rotation=-90)
plt.legend(['iluminación', f'umbral {threshold} Lx'])
plt.show()

Verifica las longitudes de los arrays con print(len(X), len(Y)). Los tipos de datos son list[float]. Incluye funciones interactivas como zoom y desplazamiento mediante la barra de herramientas de la ventana de matplotlib.

Dependencias e instalación

Lista paquetes instalados: pip freeze. Salida típica de matplotlib:

  • contourpy==1.3.3
  • cycler==0.12.1
  • fonttools==4.62.1
  • kiwisolver==1.5.0
  • matplotlib==3.10.8
  • numpy==2.4.4

Instala individualmente: pip install matplotlib numpy.

Google AdInline article slot

Por qué Matplotlib es genial para visualización de datos

  • Gratuito y de código abierto.
  • Interactivo: zoom, guardar como PNG, personalizar ejes y cuadrículas.
  • Multiplataforma: Windows, Linux (con GUI).
  • Empaquetar en EXE con PyInstaller para compartir fácilmente.
  • Huella mínima: solo un archivo .py.
  • Automatización sin interfaz: ejecuta desde línea de comandos sin GUI.

Limitaciones

  • Gráficos en tiempo real (ej. flujos COM/TCP) requieren hilos o FuncAnimation.
  • Conjuntos grandes (>1M puntos) pueden ralentizarse; optimiza con arrays de numpy.

Consejos clave

  • Usa numpy para arrays: X = np.array(X) acelera el trazado.
  • Delimitador CSV: prueba delimiter=',' o ';', o cambia a pandas para archivos complejos.
  • Etiquetas de ejes: plt.xlabel, plt.ylabel con unidades (s, Lx).
  • Leyenda: plt.legend(['datos', 'umbral']) para múltiples líneas.
  • Cuadrícula: plt.grid() mejora la legibilidad.

Python + matplotlib es la combinación ideal para visualizaciones rápidas de datos experimentales de archivos CSV. Perfecto para análisis de registros de sensores, como niveles de luz a lo largo del tiempo.

— Editorial Team

Advertisement 728x90

Leer después