Um bin é o intervalo que representa a largura de uma única barra do histograma ao longo do eixo X. Você também pode chamar isso de intervalo. (A Wikipedia os define mais formalmente como "categorias disjuntas".)
A histogram
função Numpy não desenha o histograma, mas calcula as ocorrências de dados de entrada que caem dentro de cada compartimento, que por sua vez determina a área (não necessariamente a altura se os compartimentos não forem de largura igual) de cada barra.
Neste exemplo:
np.histogram([1, 2, 1], bins=[0, 1, 2, 3])
Existem 3 bins, para valores que variam de 0 a 1 (excl. 1.), 1 a 2 (excl. 2) e 2 a 3 (incl. 3), respectivamente. A forma como Numpy define esses bins é dando uma lista de delimitadores ( [0, 1, 2, 3]
) neste exemplo, embora também retorne os bins nos resultados, já que pode escolhê-los automaticamente na entrada, se nenhum for especificado. E sebins=5
, por exemplo, ele usar 5 caixas de largura igual, espalhadas entre o valor de entrada mínimo e o valor de entrada máximo.
Os valores de entrada são 1, 2 e 1. Portanto, bin "1 a 2" contém duas ocorrências (os dois 1
valores) e bin "2 a 3" contém uma ocorrência (o 2
). Estes resultados são no primeiro item na tupla retornada: array([0, 2, 1])
.
Uma vez que as caixas aqui são de largura igual, você pode usar o número de ocorrências para a altura de cada barra. Quando desenhado, você teria:
- uma barra de altura 0 para intervalo / bin [0,1] no eixo X,
- uma barra de altura 2 para intervalo / bin [1,2],
- uma barra de altura 1 para range / bin [2,3].
Você pode plotar isso diretamente com Matplotlib (sua hist
função também retorna os bins e os 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 criado manualmente para o valor máximo na matriz.Abaixo,
hist
indica que há 0 itens no compartimento nº 0, 2 no compartimento nº 1, 4 no compartimento nº 3, 1 no compartimento nº 4.bin_edges
indica que bin # 0 é o intervalo [0,1), bin # 1 é [1,2), ..., bin # 3 é [3,4).Brinque com o código acima, altere a entrada para
np.histogram
e veja como funciona.Mas uma imagem vale mais que mil palavras:
fonte
plt.bar(bin_edges[:-1], hist, width=1)
eplt.xlim(min(bin_edges), max(bin_edges))
, para fazer as barras se ajustarem à largura esperada (caso contrário, pode haver apenas um compartimento menor sem nenhum valor entre eles).Outra coisa útil para fazer
numpy.histogram
é plotar a saída como as coordenadas xey em um gráfico de linha. Por exemplo:Essa pode ser uma maneira útil de visualizar histogramas em que você deseja um nível mais alto de granularidade sem barras em todos os lugares. Muito útil em histogramas de imagem para identificar valores extremos de pixels.
fonte