Gráficos de Hexbin: alternativa a los gráficos de dispersión en Python

Publicado el 20 marzo 2023 por Daniel Rodríguez @analyticslane

Los gráficos de dispersión son uno de los más utilizados para representar cómo se distribuyen los valores de un conjunto de datos en un plano. Son fáciles de crear y sencillos de interpretar. Aunque, cuando el conjunto de datos cuenta con centenas de registros, los gráficos de dispersión pueden ser demasiado densos para interpretarlos. En esta situación una alternativa es utilizar un gráfico de Hexbin.

Los gráficos de Hexbin

Un gráfico de Hexbin es un tipo de visualización de datos que se puede utilizar para representar la distribución de puntos en un plano. A diferencia de los gráficos de dispersión, en lugar de representar cada uno de los puntos de forma individual, los puntos se agrupan en hexágonos regulares con los que se cubre todo el plano. La densidad de puntos en cada hexágono se representa mediante una escala de colores, permitiendo visualizar las zonas donde hay mayor o menor concentración de datos. El detalle del gráfico se puede ajustar cambiando el tamaño de los hexágonos.

Los gráficos de Hexbin son particularmente útiles cuando se trabaja con conjuntos de datos muy grandes, ya que pueden resumir una gran cantidad de información en una sola figura fácil de interpretar.

Ventajas de los gráficos de Hexbin

Algunas de las ventajas de los gráficos de hexbin frente a los gráficos de dispersión son:

  1. Facilitan la interpretación en grandes conjuntos de datos: los gráficos de dispersión que se crean con grandes conjuntos de datos pueden ser demasiados densos, por lo que no son fáciles de interpretar. Los gráficos de hexbin resuelven este problema reduciendo la complejidad visual al representar los datos mediante una cuadrícula de hexágonos.
  2. Mayor precisión: los gráficos de hexbin permiten una mayor precisión al mostrar la distribución de puntos. Cada hexágono representa una zona determinada del espacio bidimensional, lo que significa que se pueden capturar patrones más sutiles y precisos que en los gráficos de dispersión tradicionales.
  3. Evita la superposición de valores: en los gráficos de dispersión los puntos se pueden superponer, ocultando de esta manera parte de la información que se desea mostrar. Por su parte, en los gráficos de hexbin, los hexágonos se superponen de manera regular evitando de esta manera la superposición de los datos.

Comparar los gráficos de dispersión y Hexbin en Python

La mejor manera de ver las ventajas que tienen los gráficos de Hexbin cuando se necesita representar grandes conjuntos de datos es crear unos valores aleatorios y representar ambos en Python. Así, se puede emplear el siguiente código para crear el conjunto de datos y una gráfica de dispersión con ellos.

import numpy as np
import matplotlib.pyplot as plt

# Generar datos aleatorios
np.random.seed(1)
x = np.dot(np.random.random(size = (2, 2)), np.random.normal(size = (2, 3000))).T

# Crear el gráfico de dispersión
plt.scatter(x[:, 0], x[:, 1])

# Mostrar el gráfico
plt.show()

En este ejemplo se ha fijado la semilla a 1 y creado un conjunto de 3000 de registros aleatorios con np.random.random(). Una vez hecho se representan mediante un gráfico de dispersión. A pesar de que el conjunto de datos no es excesivamente grande, solamente 500 puntos, ya se puede apreciar una superposición en de los datos que pueden crear confusión.

Para crear un gráfico de Hexbin en Python se puede recurrir a la función hexbin() de Matplotlib. Necesitando los mismos datos que la función scatter(), aunque es recomendable indicar el tamaño de los hexágonos para que la gráfica se adapte a nuestra necesidades, esto es lo que se hace en el siguiente código.

# Crear el gráfico de Hexbin
plt.hexbin(x[:, 0], x[:, 1], gridsize=20, cmap='Blues')

# Mostrar el gráfico
plt.show()

Empleando dos opciones gridsize para indicar el tamaño de los hexágonos y cmap para los colores que se desean usar. Como se puede ver en este ejemplo los datos son más fáciles de interpretar en esta segunda figura.

Mejorando la gráfica: añadir una escala de colores

Aunque la gráfica anterior es más fácil de interpretar, no se puede saber fácilmente cual es la densidad en cada uno de los hexágonos. Un problema que se puede solucionar fácilmente agregando la escala de colores. Para lo que se puede recurrir la función colorbar() Matplotlib que únicamente necesita la salida de la función hexbin(). De este modo, con una pequeña modificación del código, se puede comprobar a que valores se corresponde cada uno de los colores.

# Crear el gráfico de Hexbin
hb = plt.hexbin(x[:, 0], x[:, 1], gridsize=20, cmap='Blues')

# Agregar la escala de color
plt.colorbar(hb)

# Mostrar el gráfico
plt.show()

Ahora se puede ver como los colores más oscuros indica más de 80 puntos en cada uno de los hexágonos

Conclusiones

Los gráficos de hexbin son una excelente alternativa a los gráficos de dispersión cuando se trabaja con conjuntos de datos de tamaño mediano o grande. Siendo una forma eficaz de mostrar la distribución de datos en un espacio bidimensional, permitiendo una mejor comprensión de la distribución y patrones de los datos en comparación con los gráficos de dispersión.