Gráfico de histograma com plt.hist ()

Sou um iniciante em Python e desejo traçar uma lista de valores entre -0,2 e 0,2. A lista se parece com esta

[...-0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01501152092971969, -0.01489985147131656, -0.015833709930856088, -0.015833709930856088, -0.015833709930856088, -0.015833709930856088, -0.015833709930856088...and so on]. 

Em estatística, aprendi a agrupar meus dados em classes para obter um gráfico útil para um histograma, que depende de dados.

Como posso adicionar classes em python ao meu gráfico?

Meu código é

plt.hist(data) 

e histograma é semelhante a insira a descrição da imagem aqui

Mas deve ser semelhante a mg src = “https://i.stack.imgur.com/k5rwR.png” alt = “insira a descrição da imagem aqui” title = “Apenas um exemplo – as escalas são diferentes!”>

Comentários

  • Isso não está claro. Você está perguntando como agrupar os dados ou como representar graficamente os dados agrupados?
  • @ Stephen Rauch: Estou pedindo o agrupamento dos dados com plt.hist () ou de outra forma. Depois de agrupar os dados, desejo realizar o gráfico. @ Media: plt.hist (cum_returns_10_5, bins = range (min (cum_returns_10_5), max (cum_returns_10_5) + largura bin, largura bin)) NameError: nome ' binwidth ' não está definido plt.hist (data, bins = range (min (data), max (data) + binwidth , largura do compartimento)) Sua solução produz um erro (veja acima).
  • Você não deve colocar esta informação em uma resposta. Você pode comentar ou editar sua pergunta, ou ambos.
  • bem-vindo à comunidade @Tom, use comentários. a razão de não estar funcionando é que você precisa configurá-los. eles são variáveis típicas para fins de ilustração, você deve definir valores em vez deles.
  • Obrigado por essa dica @Media! @Stephen Rauch: Você poderia ser gentil e me dar um comentário sobre seus dados agrupados em python que estão escritos em uma lista para que possam ser plotados? Obrigado por sua ajuda 🙂

Resposta

Seu histograma é válido, mas tem muitos bins para ser útil.

Se você quiser um número de caixas igualmente espaçadas, pode simplesmente passar esse número pelo bins argumento de plt.hist, por exemplo:

plt.hist(data, bins=10) 

Se quiser que seus compartimentos tenham bordas específicas, você pode passá-los como uma lista para bins:

plt.hist(data, bins=[0, 5, 10, 15, 20, 25, 30, 35, 40, 60, 100]) 

Finalmente, você também pode especificar um método para calcular as bordas do compartimento automaticamente, como auto (os métodos disponíveis são especificados na documentação de numpy.histogram_bin_edges ):

plt.hist(data, bins="auto") 

Exemplo de código completo

import matplotlib.pyplot as plt import numpy as np # fix the random state for reproducibility np.random.seed(19680801); # sum of 2 normal distributions n = 500; data = 10 * np.random.randn(n) + 20 * np.random.randn(n) + 20; # plot histograms with various bins fig, axs = plt.subplots(1, 3, sharey=True, tight_layout=True, figsize=(9,3)); axs[0].hist(data, bins=10); axs[1].hist(data, bins=[0, 5, 10, 15, 20, 25, 30, 35, 40, 60, 100]); axs[2].hist(data, bins="auto"); 

insira a descrição da imagem aqui

Resposta

Você deve especificar o tamanho da lixeira , se eu “v e descobri a questão. Conforme declarado aqui .

Você pode fornecer uma lista com os limites do compartimento.

plt.hist(data, bins=[0, 10, 20, 30, 40, 50, 100]) 

Se você apenas deseja que sejam igualmente distribuídos, você pode simplesmente usar intervalo:

plt.hist(data, bins=range(min(data), max(data) + binwidth, binwidth)) 

Você também pode pegar dê uma olhada aqui e aqui .

Comentários

  • Se você quiser que eles sejam igualmente distribuídos, há uma maneira mais simples: em vez de fornecer os limites do compartimento como um argumento, apenas diga ao matplotlib quantos compartimentos você deseja, por exemplo plt.hist(data, bins=20).
  • @Xavier Obrigado por sua resposta, eu acho que você pode querer enviar sua resposta. Como você deve ter notado, a questão ainda não foi encerrada 🙂

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *