Gráfico hexbin en matplotlib

La función hexbin de matplotlib

Los gráficos hexbin son gráficos de puntos en intervalos hexagonales 2D y son una alternativa a los gráficos de dispersión cuando se trabaja con muchos datos. En matplotlib existe una función llamada hexbin que permite crear este tipo de gráficos.

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(8)

# Simulación de datos
x = np.random.normal(0, 1, 1000000)
y = 3 * x + 5 * np.random.normal(0, 1, 1000000)

# Gráfico hexbin
fig, ax = plt.subplots()
ax.hexbin(x = x, y = y)
plt.show()

La función hexbin en matplotlib

Número de hexágonos

El número por defecto de hexágonos de los ejes es 100, pero si pasas un entero al argumento gridsize puedes cambiar el número de hexágonos del eje X, mientras que el número de hexágonos del eje Y se elegirá de manera automática.

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(8)

# Simulación de datos
x = np.random.normal(0, 1, 1000000)
y = 3 * x + 5 * np.random.normal(0, 1, 1000000)

# Gráfico hexbin
fig, ax = plt.subplots()
ax.hexbin(x = x, y = y, gridsize = 15)
# plt.show()

Número de hexágonos de un gráfico hexbin en Python

Sin embargo, también puedes pasar un array de tamaño dos, donde el primer elemento será el número de hexágonos del eje X mientras que el segundo será el número para el eje Y.

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(8)

# Simulación de datos
x = np.random.normal(0, 1, 1000000)
y = 3 * x + 5 * np.random.normal(0, 1, 1000000)

# Gráfico hexbin
fig, ax = plt.subplots()
ax.hexbin(x = x, y = y, gridsize = [15, 30])
# plt.show()

Cambiar el número de hexágonos de un gráfico hexbin en matplotlib

Número de clases

Al crear un gráfico hexbin el color de fondo de cada hexágono corresponde a su valor, pero si quieres utilizar una escala logarítimca para la paleta de colores puedes establecer el argumento bins como "log".

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(8)

# Simulación de datos
x = np.random.normal(0, 1, 1000000)
y = 3 * x + 5 * np.random.normal(0, 1, 1000000)

# Gráfico hexbin
fig, ax = plt.subplots()
ax.hexbin(x = x, y = y, bins = "log")
# plt.show()

Número de clases de un gráfico hexbin de matplotlib

Ten en cuenta que también puedes pasar un número entero al argumento. En este escenario, los hexágonos se dividirán en tantas clases como el número especificado. En el ejemplo siguiente establecemos bins = 5, por lo que el gráfico tendrá tan solo cinco clases diferentes y por tanto cinco colores.

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(8)

# Simulación de datos
x = np.random.normal(0, 1, 1000000)
y = 3 * x + 5 * np.random.normal(0, 1, 1000000)

# Gráfico hexbin
fig, ax = plt.subplots()
ax.hexbin(x = x, y = y, bins = 5)
# plt.show()

Cambiar el número de clases de un gráfico hexbin hecho com Python y matplotlib

Personalización del color

Transparencia

El argumento alpha se puede utilizar para incrementar la transparencia del color de fondo de los hexágonos. Esto puede ser útil para ver mejor los bordes de los hexágonos cuando la paleta de color es muy oscura.

Transparencia de un gráfico hexbin en matplotlib

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(8)

# Simulación de datos
x = np.random.normal(0, 1, 1000000)
y = 3 * x + 5 * np.random.normal(0, 1, 1000000)

# Gráfico hexbin
fig, ax = plt.subplots()
ax.hexbin(x = x, y = y, gridsize = 15, alpha = 0.5)
# plt.show()

Color y grosor de los bordes

Una alternativa es cambiar el color de borde y el grosor de los hexágonos con los argumentos edgecolor y linewidths, respectivamente.

Color de borde de los hexágonos de un gráfico hexbin

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(8)

# Simulación de datos
x = np.random.normal(0, 1, 1000000)
y = 3 * x + 5 * np.random.normal(0, 1, 1000000)

# Gráfico hexbin
fig, ax = plt.subplots()
ax.hexbin(x = x, y = y, gridsize = 15,
          edgecolor = "white", linewidths = 1.5)
# plt.show()

Paleta de colores

Por último, también puedes cambiar la paleta de colores por defecto con el argumento cmap. En el ejemplo siguiente estamos estableciendo la paleta de colores llamada "magma".

Paleta de colores de un gráfico hexbin con matplotlib

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(8)

# Simulación de datos
x = np.random.normal(0, 1, 1000000)
y = 3 * x + 5 * np.random.normal(0, 1, 1000000)

# Gráfico hexbin
fig, ax = plt.subplots()
ax.hexbin(x = x, y = y, gridsize = 20, bins = "log",
          cmap = "magma")
# plt.show()
Fundamentals of Data Visualization

A Primer on Making Informative and Compelling Figures

Comprar en Amazon

También te puede interesar