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

De la Regresión Logística al Scorecard: La Transformación Matemática

En un entrada previa explicamos qué son el WOE y el IV y por qué…

3 horas ago

Analytics Lane lanza la versión 1.1 del laboratorio con nuevas suites de CLV y Scoring

Seguimos evolucionando el laboratorio de Analytics Lane y hoy lanzamos la versión 1.1, disponible en:…

1 día ago

Interés compuesto: la fuerza que multiplica tu dinero (y los errores que la anulan)

“El interés compuesto es la octava maravilla del mundo. El que lo entiende lo gana…

5 días ago

Cómo comparar datos con barras en Matplotlib: agrupadas, apiladas y porcentuales

Tienes los datos de ventas de tres productos en dos años distintos y quieres saber…

1 semana ago

Costes hundidos en ciencia de datos: cuándo mantener un modelo y cuándo migrar

Imagina la situación. Tu equipo lleva tres años con un modelo en producción. No es…

2 semanas ago

WOE e IV: La Base Matemática del Credit Scoring

Cuando un banco evalúa una solicitud de crédito necesita responder a una pregunta aparentemente simple:…

2 semanas ago

This website uses cookies.