Histograma en pandas

pandas proporciona dos formas de crear histogramas: plot.hist, que dibuja todas las columnas en el mismo gráfico, y hist, que crea una cuadrícula con un histograma por columna.

Histograma con plot.hist

Llama a plot.hist sobre una Series para dibujar su histograma. El argumento bins establece el número de intervalos (10 por defecto).

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

rng = np.random.default_rng(5)
df = pd.DataFrame({"matematicas": rng.normal(65, 12, 300).clip(0, 100),
                   "fisica": rng.normal(55, 15, 300).clip(0, 100),
                   "colegio": rng.choice(["Norte", "Sur", "Este"], 300)})

df["matematicas"].plot.hist(bins = 20, edgecolor = "white")
# plt.show()

Histograma en pandas con plot.hist

Varios histogramas en el mismo gráfico

Sobre un data frame, plot.hist dibuja un histograma por columna en el mismo gráfico. Establece cierta transparencia con alpha para que todos sean visibles, o apílalos con stacked = True.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

rng = np.random.default_rng(5)
df = pd.DataFrame({"matematicas": rng.normal(65, 12, 300).clip(0, 100),
                   "fisica": rng.normal(55, 15, 300).clip(0, 100),
                   "colegio": rng.choice(["Norte", "Sur", "Este"], 300)})

df[["matematicas", "fisica"]].plot.hist(bins = 20, alpha = 0.5)
# plt.show()

Histogramas superpuestos en pandas

Histograma apilado

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

rng = np.random.default_rng(5)
df = pd.DataFrame({"matematicas": rng.normal(65, 12, 300).clip(0, 100),
                   "fisica": rng.normal(55, 15, 300).clip(0, 100),
                   "colegio": rng.choice(["Norte", "Sur", "Este"], 300)})

df[["matematicas", "fisica"]].plot.hist(bins = 20, stacked = True)
# plt.show()

Histograma apilado en pandas

Un histograma por columna con hist

El método hist crea una cuadrícula de subplots con el histograma de cada columna numérica.

Un histograma por columna con df.hist en pandas

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

rng = np.random.default_rng(5)
df = pd.DataFrame({"matematicas": rng.normal(65, 12, 300).clip(0, 100),
                   "fisica": rng.normal(55, 15, 300).clip(0, 100),
                   "colegio": rng.choice(["Norte", "Sur", "Este"], 300)})

df.hist(bins = 20, figsize = (8, 3.5))
# plt.show()

Histograma por grupo

El argumento by de hist crea un histograma para cada grupo de una variable categórica.

Histograma por grupo en pandas

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

rng = np.random.default_rng(5)
df = pd.DataFrame({"matematicas": rng.normal(65, 12, 300).clip(0, 100),
                   "fisica": rng.normal(55, 15, 300).clip(0, 100),
                   "colegio": rng.choice(["Norte", "Sur", "Este"], 300)})

df.hist(column = "matematicas", by = "colegio", bins = 15, layout = (1, 3),
        sharex = True, figsize = (8, 3))
# plt.show()

Histograma con curva de densidad

Utiliza density = True para mostrar el histograma en proporciones y agrega la estimación de densidad kernel con plot.kde sobre los mismos ejes.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

rng = np.random.default_rng(5)
df = pd.DataFrame({"matematicas": rng.normal(65, 12, 300).clip(0, 100),
                   "fisica": rng.normal(55, 15, 300).clip(0, 100),
                   "colegio": rng.choice(["Norte", "Sur", "Este"], 300)})

ax = df["matematicas"].plot.hist(bins = 20, density = True, alpha = 0.5)
df["matematicas"].plot.kde(ax = ax)
# plt.show()

Histograma con curva de densidad en pandas

Consulta también cómo crear un histograma en matplotlib o en seaborn y la guía sobre gráficos con pandas.

Storytelling con Datos

Visualización de datos para profesionales

Comprar en Amazon
Data Sketches

A journey of imagination, exploration, and beautiful data visualizations

Comprar en Amazon

También te puede interesar