Un intervalo es un rango que representa el ancho de una sola barra del histograma a lo largo del eje X. También podría llamar a esto el intervalo. (Wikipedia las define más formalmente como "categorías disjuntas").
La histogram
función Numpy no dibuja el histograma, pero calcula las ocurrencias de datos de entrada que caen dentro de cada contenedor, lo que a su vez determina el área (no necesariamente la altura si los contenedores no tienen el mismo ancho) de cada barra.
En este ejemplo:
np.histogram([1, 2, 1], bins=[0, 1, 2, 3])
Hay 3 contenedores, para valores que van de 0 a 1 (excluido 1), 1 a 2 (excluido 2) y 2 a 3 (incl. 3), respectivamente. La forma en que Numpy define estos bins es dando una lista de delimitadores ( [0, 1, 2, 3]
) en este ejemplo, aunque también devuelve los bins en los resultados, ya que puede elegirlos automáticamente desde la entrada, si no se especifica ninguno. Si bins=5
, por ejemplo, utilizará 5 contenedores de igual ancho repartidos entre el valor de entrada mínimo y el valor de entrada máximo.
Los valores de entrada son 1, 2 y 1. Por lo tanto, el bin "1 a 2" contiene dos apariciones (los dos 1
valores) y el bin "2 a 3" contiene una ocurrencia (el 2
). Estos resultados están en el primer elemento de la tupla devuelta: array([0, 2, 1])
.
Dado que los contenedores aquí tienen el mismo ancho, puede usar el número de ocurrencias para la altura de cada barra. Cuando se dibuje, tendrías:
- una barra de altura 0 para rango / intervalo [0,1] en el eje X,
- una barra de altura 2 para rango / contenedor [1,2],
- una barra de altura 1 para rango / contenedor [2,3].
Puede trazar esto directamente con Matplotlib (su hist
función también devuelve los contenedores y los valores):
>>> import matplotlib.pyplot as plt
>>> plt.hist([1, 2, 1], bins=[0, 1, 2, 3])
(array([0, 2, 1]), array([0, 1, 2, 3]), <a list of 3 Patch objects>)
>>> plt.show()
bins
valor creado manualmente al valor máximo en la matriz.A continuación,
hist
indica que hay 0 elementos en el contenedor # 0, 2 en el contenedor # 1, 4 en el contenedor # 3, 1 en el contenedor # 4.bin_edges
indica que bin # 0 es el intervalo [0,1), bin # 1 es [1,2), ..., bin # 3 es [3,4).Juega con el código anterior, cambia la entrada a
np.histogram
y mira cómo funciona.Pero una imagen vale más que mil palabras:
fuente
plt.bar(bin_edges[:-1], hist, width=1)
yplt.xlim(min(bin_edges), max(bin_edges))
, para que las barras se ajusten a su ancho esperado (de lo contrario, puede haber un contenedor más pequeño sin valores intermedios).Otra cosa útil para hacer
numpy.histogram
es trazar la salida como las coordenadas xey en un gráfico de líneas. Por ejemplo:Esta puede ser una forma útil de visualizar histogramas donde le gustaría un mayor nivel de granularidad sin barras en todas partes. Muy útil en histogramas de imágenes para identificar valores extremos de píxeles.
fuente