Cómo configurar manualmente el tamaño de los contenedores en el histograma Matplotlib
-
Límites de bin como parámetro para la función
hist()
- Calcule el número de contenedores desde el ancho deseado
Para dibujar el histograma, utilizamos la función hist2d()
, donde se pasa el número de bins n
como parámetro. Podemos establecer el tamaño de los contenedores calculando el número requerido de contenedores para mantener el tamaño requerido.
Límites de bin como parámetro para la función hist()
Sintaxis para función hist
:
hist(x,
bins: NoneType=None,
range: NoneType=None,
density: NoneType=None,
weights: NoneType=None,
cumulative: bool=False,
bottom: NoneType=None,
histtype: str=builtins.str,
align: str=builtins.str,
orientation: str=builtins.str,
rwidth: NoneType=None,
log: bool=False,
color: NoneType=None,
label: NoneType=None,
stacked: bool=False,
normed: NoneType=None,
data: NoneType=None,
**kwargs)
Para establecer el tamaño de los contenedores en Matplotlib, pasamos una lista con los límites del contenedor en lugar del número de contenedores como el parámetro bin
.
import numpy as np
import numpy.random as random
import matplotlib.pyplot as plt
data = np.random.random_sample(100) * 100.0
plt.hist(data, bins=[0, 10, 20, 30, 40, 50, 60, 80, 100])
plt.xlabel("Value")
plt.ylabel("Counts")
plt.title("Histogram Plot of Data")
plt.grid(True)
plt.show()
Establecemos manualmente los límites del contenedor, e indirectamente el ancho del contenedor, en el ejemplo anterior. También podríamos usar np.arange
para encontrar límites igualmente espaciados.
Para hacer que los contenedores estén igualmente espaciados, podemos usar np.arange
para encontrar límites igualmente espaciados
import numpy as np
import numpy.random as random
import matplotlib.pyplot as plt
binwidth = 10
data = np.random.random_sample(100) * 100.0
plt.hist(data, bins=np.arange(min(data), max(data) + binwidth, binwidth))
plt.xlabel("Data")
plt.ylabel("Counts")
plt.title("Histogram Plot of Data")
plt.grid(True)
plt.show()
np.arange
será max(data) + binwidth
pero no max(data)
, porque el intervalo creado por np.arange(start, stop, step)
incluye start
pero excluye stop
. Por lo tanto, necesitamos agregar el intervalo binwidth
a max(data)
para hacer la parada real como max(data)
.Calcule el número de contenedores desde el ancho deseado
Para encontrar el número de contenedores, calculamos el resultado del valor máximo-valor mínimo
dividido por el ancho del contenedor deseado.
import numpy as np
import matplotlib.pyplot as plt
def find_bins(observations, width):
minimmum = np.min(observations)
maximmum = np.max(observations)
bound_min = -1.0 * (minimmum % width - minimmum)
bound_max = maximmum - maximmum % width + width
n = int((bound_max - bound_min) / width) + 1
bins = np.linspace(bound_min, bound_max, n)
return bins
data = np.random.random_sample(120) * 100
bins = find_bins(data, 10.0)
plt.hist(data, bins=bins)
plt.xlabel("Data")
plt.ylabel("Counts")
plt.title("Histogram Plot")
plt.show()
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn