hist2d
Los histogramas 2D, también llamados histogramas bivariantes, se utilizan para visualizar la relación entre dos variables numéricas cuando el número de observaciones es muy grande. El gráfico se divide en clases (áreas) que se colorean en base al número de puntos dentro de cada área. Este gráfico es una alternativa a los gráficos hexbin.
import numpy as np
import matplotlib.pyplot as plt
# Datos de muestra
np.random.seed(1)
x = np.random.normal(size = 10000)
y = x + np.random.normal(size = 10000)
fig, ax = plt.subplots()
ax.hist2d(x, y)
# plt.show()
Paleta de colores
La paleta de colores por defecto es viridis
, pero puedes cambiarla con el argumento cmap
, como en el ejemplo siguiente.
import numpy as np
import matplotlib.pyplot as plt
# Datos de muestra
np.random.seed(1)
x = np.random.normal(size = 10000)
y = x + np.random.normal(size = 10000)
fig, ax = plt.subplots()
ax.hist2d(x, y, cmap = 'BuPu')
# plt.show()
Transparencia del color
Ten en cuenta que también puedes modificar la transparencia de los colores con alpha
, cuyos posibles valores van de 0 (transparente) a 1 (opaco, por defecto).
import numpy as np
import matplotlib.pyplot as plt
# Datos de muestra
np.random.seed(1)
x = np.random.normal(size = 10000)
y = x + np.random.normal(size = 10000)
fig, ax = plt.subplots()
ax.hist2d(x, y, alpha = 0.5)
# plt.show()
Método de normalización
El argumento norm
de la función hist2d
se puede utilizar para normalizar los datos entre 0 y 1 antes de asignar colores a cada área. En el ejemplo siguiente transformamos los datos en una escala logarítmica, de modo que las clases sin valores no tendrán color.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors
# Datos de muestra
np.random.seed(1)
x = np.random.normal(size = 10000)
y = x + np.random.normal(size = 10000)
fig, ax = plt.subplots()
ax.hist2d(x, y, norm = colors.LogNorm())
# plt.show()
Valores mínimo y máximo para cada área
También puedes establecer el valor mínimo y máximo de valores que debe contener cada clase o área para tenerse en cuenta con los argumentos cmin
y cmax
, respectivamente.
import numpy as np
import matplotlib.pyplot as plt
# Datos de muestra
np.random.seed(1)
x = np.random.normal(size = 10000)
y = x + np.random.normal(size = 10000)
fig, ax = plt.subplots()
ax.hist2d(x, y, cmin = 1, cmax = 150)
plt.show()
El número de clases o áreas se puede personalizar utilizando el argumento bins
, que por defecto es 10. La especificación de clases admite cuatro formas diferentes, listadas a continuación:
Número de clases para las dos dimensiones
Si pasas un entero al argumento el número será utilizado como el número de clases para cada eje.
import numpy as np
import matplotlib.pyplot as plt
# Datos de muestra
np.random.seed(1)
x = np.random.normal(size = 10000)
y = x + np.random.normal(size = 10000)
fig, ax = plt.subplots()
ax.hist2d(x, y, bins = 30)
# plt.show()
Número de clases para cada eje
Sin embargo, también puedes establecer el número de clases de cada eje con un array. El primer elemento será el número de clases para el eje X mientras que el segundo será el número de clases para el eje Y.
import numpy as np
import matplotlib.pyplot as plt
# Datos de muestra
np.random.seed(1)
x = np.random.normal(size = 10000)
y = x + np.random.normal(size = 10000)
fig, ax = plt.subplots()
ax.hist2d(x, y, bins = [50, 10])
# plt.show()
Límites de las clases para las dos dimensiones
Una alternativa es establecer los límites de las clases para las dos dimensiones pasando un array de límites.
import numpy as np
import matplotlib.pyplot as plt
# Datos de muestra
np.random.seed(1)
x = np.random.normal(size = 10000)
y = x + np.random.normal(size = 10000)
fig, ax = plt.subplots()
ax.hist2d(x, y, np.arange(-4, 4, 0.2))
# plt.show()
Límites de cada clase para cada dimensión
La última opción es establecer los límites de cada clase para cada dimensión, como en el ejemplo siguiente.
import numpy as np
import matplotlib.pyplot as plt
# Datos de muestra
np.random.seed(1)
x = np.random.normal(size = 10000)
y = x + np.random.normal(size = 10000)
fig, ax = plt.subplots()
ax.hist2d(x, y, bins = (np.arange(-3, 3, 0.5), np.arange(-3, 3, 0.5)))
# plt.show()
También te puede interesar