Histograma en matplotlib

La función hist en matplotlib

La función hist permite crear histogramas en Python al utilizar matplotlib. Para crear un histograma básico tan solo es necesario pasar una variable numérica a la función.

import numpy as np
import matplotlib.pyplot as plt

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

# Simulación de datos
x = np.random.normal(0, 1, 100)

# Histograma
fig, ax = plt.subplots()
ax.hist(x)
# plt.show()

Histograma básico en matplotlib con la función hist

Histograma horizontal

Estableciendo el argumento orientation como "horizontal" puedes rotar los ejes y crear un histograma horizontal.

import numpy as np
import matplotlib.pyplot as plt

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

# Simulación de datos
x = np.random.normal(0, 1, 100)

# Histograma
fig, ax = plt.subplots()
ax.hist(x, orientation = "horizontal")
# plt.show()

Histograma horizontal en matplotlib

Histograma de densidad

El histograma que se crea por defecto con hist es un histograma de frecuencias. Si prefieres crear un histograma de densidad tendrás que establecer el argumento density como True.

import numpy as np
import matplotlib.pyplot as plt

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

# Simulación de datos
x = np.random.normal(0, 1, 100)

# Histograma
fig, ax = plt.subplots()
ax.hist(x, density = True)
# plt.show()

Histograma de densidad en matplotlib

Histograma de frecuencias acumuladas

La función hist también permite crear histogramas de frecuencias acumuladas, tan solo es necesario establecer cumulative = True como argumento.

import numpy as np
import matplotlib.pyplot as plt

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

# Simulación de datos
x = np.random.normal(0, 1, 100)

# Histograma
fig, ax = plt.subplots()
ax.hist(x, cumulative = True)
# plt.show()

Histograma de frecuencias acumuladas en Python con matplotlib

Número de clases

El número por defecto de clases (bins) de un histograma hecho con la función hist es 10. Sin embargo, esto puede que no sea la mejor opción para todos los conjuntos de datos. En este escenario, puedes utilizar el argumento bins para elegir un número de clases más adecuado o establecer un método de selección. Los métodos de selección disponibles son 'auto', 'fd', 'doane', 'scott', 'stone', 'rice', 'sturges' (el utilizado por defecto en el lenguaje de programación R) y 'sqrt'.

import numpy as np
import matplotlib.pyplot as plt

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

# Simulación de datos
x = np.random.normal(0, 1, 100)

# Histograma (demasiadas clases)
fig, ax = plt.subplots()
ax.hist(x, bins = 40)
# plt.show()

Número de clases de un histograma en Python

Histograma por grupo

También puedes crear un histograma con varios grupos con la función. Para ello tan solo es necesario pasar una lista con varios conjuntos de datos, como en el ejemplo siguiente. Por defecto, las barras de los grupos se mostrarán una al lado de las otras.

Histograma por grupo en matplotlib

import numpy as np
import matplotlib.pyplot as plt

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

# Simulación de datos
x1 = np.random.normal(0, 1, 100)
x2 = np.random.normal(0, 1, 100)
x = [x1, x2]

# Histograma
fig, ax = plt.subplots()
ax.hist(x)
plt.show()
# plt.show()

Ten en cuenta que cuando se crea un histograma con varios conjuntos de datos, los datos no tienen por qué tener la misma dimensión.

Tipos de histogramas

La función proporciona la posibilidad de crear varios tipos de histograma además del utilizado por defecto ("bar").

“barstacked”

El método "barstacked" apila las barras cuando hay varios grupos. Este tipo de histograma también se puede crear con stacked = True.

import numpy as np
import matplotlib.pyplot as plt

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

# Simulación de datos
x1 = np.random.normal(0, 1, 100)
x2 = np.random.normal(0, 1, 100)
x = [x1, x2]

# Histograma
fig, ax = plt.subplots()
ax.hist(x, histtype = "barstacked")
# plt.show()

Histograma apilado en Python con matplotlib

“step”

El método "step" genera un gráfico de líneas, es decir, muestra el borde exterior de las barras del histograma, mostrando su forma sin relleno.

import numpy as np
import matplotlib.pyplot as plt

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

# Simulación de datos
x = np.random.normal(0, 1, 100)

# Histograma
fig, ax = plt.subplots()
ax.hist(x, histtype = "step")
# plt.show()

Histograma tipo step en matplotlib

“stepfilled”

El último método disponible es el método "stepfilled", que es lo mismo que "step" pero con color de relleno. Si tienes un grupo mostrará lo mismo que el tipo por defecto, pero si tienes varios grupos se solaparán uno sobre otro, como en el ejemplo siguiente.

import numpy as np
import matplotlib.pyplot as plt

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

# Simulación de datos
x1 = np.random.normal(0, 1, 100)
x2 = np.random.normal(0, 1, 100)
x = [x1, x2]

# Histograma
fig, ax = plt.subplots()
ax.hist(x, histtype = "stepfilled")
# plt.show()

Histogram stepfilled en matplotlib

Personalizar los colores

Color de fondor

El argumento color permite cambiar el color azul por defecto de las barras del histograma.

Color de fondo de las barras de un histograma en matplotlib

import numpy as np
import matplotlib.pyplot as plt

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

# Simulación de datos
x = np.random.normal(0, 1, 100)

# Histograma
fig, ax = plt.subplots()
ax.hist(x, color = "lightsteelblue")
# plt.show()

Color de los bordes

Por defecto, el color de borde de las barras es el mismo que el color de fondo, pero puedes utilizar el argumento edgecolor para personalizar su color. Con el siguiente código puedes crear un histograma “clásico”, donde las barras se muestran separadas.

Cambiar el color de borde de las barras de un histograma en matplotlib with edgecolor

import numpy as np
import matplotlib.pyplot as plt

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

# Simulación de datos
x = np.random.normal(0, 1, 100)

# Histograma
fig, ax = plt.subplots()
ax.hist(x, edgecolor = "white")
# plt.show()

Color por grupo

Por último, si tus datos contienen varios grupos puedes pasar una lista de colores al argumento color para personalizar los colores de los grupos.

Cambiar los colores de un histograma por grupo en Python

import numpy as np
import matplotlib.pyplot as plt

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

# Simulación de datos
x1 = np.random.normal(0, 1, 100)
x2 = np.random.normal(0, 1, 100)
x = [x1, x2]

# Histograma
fig, ax = plt.subplots()
ax.hist(x, color = ["lightsalmon", "mediumaquamarine"])
# plt.show()
Better Data Visualizations

A Guide for Scholars, Researchers, and Wonks

Comprar en Amazon

También te puede interesar