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)
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");
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 🙂