Python

Conectar puntos en gráficas de dispersión en Matplotlib

En una gráfica de dispersión donde existe un patrón en los datos que se desea mostrar al lector, si solamente se usan los puntos, puede ser complicado para este identificarlo. Siendo aconsejable en estos casos unir estos mediante líneas, para lo que existen múltiples opciones en Matplotlib. Veamos a continuación algunas de los métodos para conectar los puntos en gráficas de dispersión en Matplotlib.

Creación de una gráfica de dispersión básicas

Para ver el problema lo mejor es un ejemplo, en el siguiente código se muestra una señal en 20 puntos.

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, np.pi, 20)
y = np.sin(3 * np.pi * x / 2)

plt.scatter(x, y)
plt.xlabel('Tiempo')
plt.ylabel('Amplitud')
plt.show()

Lo que produce la siguiente figura.

Gráfica de dispersión básica creada en Matplotlib

En la que es realmente difícil ver el patrón que existe en los datos. Algo que se puede solucionar conectando los puntos de la gráfica. Para ello se puede usar el método plot() de Matplotlib, agregando a la figura anterior unas líneas que conectan los datos. Lo que se hace en el siguiente código.

plt.scatter(x, y)
plt.plot(x, y)
plt.xlabel('Tiempo')
plt.ylabel('Amplitud')
plt.show()

Obteniendo como resultado la siguiente figura.

Gráfica de dispersión unida con líneas

Una figura mucho más fácil de leer que la anterior, viéndose claramente que la señal tiene forma sinusoidal.

Incluir marcas en el método plot()

Para obtener la figura anterior existe una opción más sencillo, en las líneas que se crean mediante el método plot() es posible indicar cómo tercera opción una marca, el tipo de línea y el color. Siendo necesario hacer esto en una cadena exactamente en ese orden. Por ejemplo, en el siguiente ejemplo se crea una figura con marcas cuadradas, unidad por una línea discontinua de color rojo.

plt.plot(x, y, 's--r')
plt.xlabel('Tiempo')
plt.ylabel('Amplitud')
plt.show()

Lo que genera como resultado la siguiente figura.

Gráfica de dispersión unida con líneas discontinua y en color rojo

Marcar y líneas de diferente color

Quizás el problema del método anterior es que no se puede fijar un color diferente para las marcas y las líneas que las unen. Algo que solo se puede conseguir creando una gráfica de dispersión con scatter() para las marcas y otra para las líneas con plot(). En el método scatter() el color de la marca se puede definir mediante la propiedad c, el tipo de marca con la propiedad marker y su tamaño mediante s. Así si se desean marcas triangulares de color negro y tamaño 75 con líneas verdes se puede usar el siguiente código.

plt.scatter(x, y, c='k', marker='v', s=75)
plt.plot(x, y, '--g', linewidth=2)
plt.xlabel('Tiempo')
plt.ylabel('Amplitud')
plt.show()

Obteniendo la siguiente figura.

Gráfica de dispersión con marcar triangulares negras y unidas mediante líneas discontinuas verdes

Otra ventaja de este método es que además se puede cambiar el tamaño de cada una de las marcas. Algo que permite incluir otra información en las gráficas, usando el tamaño de las marcas para ello. Por ejemplo, en el siguiente código el tamaño de las marcas depende del valor absoluto de la señal.

s = [75 * (np.abs(n) + 1) for n in y]

plt.scatter(x, y, c='k', marker='v', s=s)
plt.plot(x, y, '--g', linewidth=2)
plt.xlabel('Tiempo')
plt.ylabel('Amplitud')
plt.show()

Produciendo la siguiente figura al ejecutar el código.

Gráfica de dispersión con marcar triangulares negros de diferente tamaño y unidas mediante líneas discontinuas verdes

Conclusiones

En la entrada de hoy se ha visto algunas de las diferentes opciones que existen para conectar puntos en gráficas de dispersión en Matplotlib. Algo que permite crear gráficos más legibles.

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: Matplotlib

Recent Posts

Cómo Detectar Pseudo-IDs y Data Leakage en el Constructor de Scorecards

El artículo Data Leakage en Credit Scoring explicó por qué este es el error más…

7 horas ago

Cómo Verificar la Normalidad de tus Datos antes de un Test Estadístico

Antes de aplicar muchos tests estadísticos clásicos (el t-test, el ANOVA, la regresión lineal) aparece…

5 días ago

Docker Compose: el día a día. Cómo ver qué funciona y qué no

Si acabas de montar tu aplicación en Docker Compose, la primera pregunta que haces cada…

1 semana ago

Migrar tslane a un paquete dual CommonJS y ESM con tsup y Vitest

tslane es la plantilla que uso como punto de partida para mis librerías TypeScript, nacida…

2 semanas ago

Cómo construir tu primer scorecard paso a paso

En los artículos anteriores de esta serie vimos la teoría detrás del credit scoring: qué…

2 semanas ago

Actualizar expresslanets a ES Modules con tsx y Vitest

expresslanets es la plantilla de API REST con Express y TypeScript que empezó como una…

3 semanas ago

This website uses cookies.