Estou usando o matplotlib para fazer um histograma.
Existe alguma maneira de definir manualmente o tamanho dos compartimentos em oposição ao número de compartimentos?
python
matplotlib
histogram
Sam Creamer
fonte
fonte
(data.max() - data.min()) / number_of_bins_you_want
. A+ binwidth
pode ser alterado para apenas1
para tornar este um exemplo mais facilmente compreendido.lw = 5, color = "white"
ou semelhantes inserções de espaços em branco entre barrasPara os compartimentos N, as bordas da bandeja são especificadas pela lista de valores N + 1, onde o primeiro N fornece as bordas inferiores da bandeja e o +1 fornece a borda superior da última bandeja.
Código:
Observe que o linspace produz uma matriz de min_edge a max_edge dividida em valores N + 1 ou N bins
fonte
Eu acho que a maneira mais fácil seria calcular o mínimo e o máximo dos dados que você possui e depois calcular
L = max - min
. Em seguida, você divideL
pela largura desejada da lixeira (suponho que isso seja o que você quer dizer com tamanho da lixeira) e usa o teto desse valor como o número de lixeiras.fonte
Eu gosto que as coisas aconteçam automaticamente e que as caixas caiam em valores "agradáveis". O seguinte parece funcionar muito bem.
O resultado possui compartimentos em intervalos agradáveis de tamanho de compartimento.
fonte
desired_bin_size=0.05
,min_boundary=0.850
,max_boundary=2.05
o cálculo den_bins
se tornaint(23.999999999999993)
o que resulta em 23 em vez de 24, e, por conseguinte, um bin muito poucos. Um arredondamento antes da conversão de número inteiro funcionou para mim:n_bins = int(round((max_boundary - min_boundary) / desired_bin_size, 0)) + 1
Eu uso quantis para fazer caixas uniformes e ajustadas à amostra:
fonte
np.arange(0, 1.01, 0.5)
ounp.linspace(0, 1, 21)
. Não há arestas, mas entendo que as caixas têm área igual, mas largura diferente no eixo X?Eu tive o mesmo problema do OP (acho!), Mas não consegui fazê-lo funcionar da maneira especificada pela Lastalda. Não sei se interpretei a pergunta corretamente, mas encontrei outra solução (provavelmente é uma maneira muito ruim de fazer isso).
Foi assim que eu fiz:
plt.hist([1,11,21,31,41], bins=[0,10,20,30,40,50], weights=[10,1,40,33,6]);
O que cria isso:
Portanto, o primeiro parâmetro basicamente 'inicializa' a lixeira - estou criando especificamente um número que está entre o intervalo que eu defini no parâmetro bins.
Para demonstrar isso, observe a matriz no primeiro parâmetro ([1,11,21,31,41]) e a matriz 'bin' no segundo parâmetro ([0,10,20,30,40,50]) :
Então, eu estou usando o parâmetro 'pesos' para definir o tamanho de cada caixa. Esta é a matriz usada para o parâmetro de pesos: [10,1,40,33,6].
Portanto, o compartimento de 0 a 10 recebe o valor 10, o compartimento de 11 a 20 recebe o valor de 1, o compartimento de 21 a 30 recebe o valor de 40 etc.
fonte
Para um histograma com valores x inteiros, acabei usando
O deslocamento de 0,5 centraliza os compartimentos nos valores do eixo x. A
plt.xticks
chamada adiciona uma marca para cada número inteiro.fonte