Histograma 2D en matplotlib

Histogramas 2D con la función 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()

Histograma 2D en matplotlib

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()

La función hist2d de matpltlib

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()

Histograma 2D en Python

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()

Histograma bivariante en Python

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()

Histograma bivariante en matplotlib

Número de clases

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.

Número de clases de un histograma 2D en matplotlib

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.

Establecer el número de clases en hist2d

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.

Número de clases para cada dimensión de un histograma 2D de Python

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.

Histograma 2D en matplotlib con la función hist2d

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()
Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon
Storytelling con Datos

Visualización de datos para profesionales

Comprar en Amazon

También te puede interesar