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()
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()
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()
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()
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()
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.
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.
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"
.
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()
También te puede interesar