Criei um gráfico de histograma usando dados de um arquivo e sem problemas. Agora eu queria sobrepor dados de outro arquivo no mesmo histograma, então faço algo assim
n,bins,patchs = ax.hist(mydata1,100)
n,bins,patchs = ax.hist(mydata2,100)
mas o problema é que, para cada intervalo, apenas a barra com o valor mais alto aparece e a outra está oculta. Eu me pergunto como eu poderia plotar os dois histogramas ao mesmo tempo com cores diferentes.
python
matplotlib
plot
histogram
Abra o caminho
fonte
fonte
pyplot.hold(True)
antes da plotagem, por precaução?None
por padrão. Se você deseja o mesmo design, como mostrado no gráfico, pode definir oedgecolor
parâmetro em ambos, por exemplo, parak
(preto). O procedimento é semelhante para a legenda.pyplot.hist([x, y], bins, alpha=0.5, label=['x', 'y'])
.As respostas aceitas fornecem o código para um histograma com barras sobrepostas, mas caso você queira que cada barra fique lado a lado (como eu fiz), tente a variação abaixo:
Referência: http://matplotlib.org/examples/statistics/histogram_demo_multihist.html
EDIT [2018/03/16]: atualizado para permitir a plotagem de matrizes de tamanhos diferentes, conforme sugerido por @stochastic_zeitgeist
fonte
plt.hist
para produzir um arquivo pdf para cada histograma? Carreguei meus dados usandopandas.read_csv
e o arquivo tem 36 colunas e 100 linhas. Então, eu gostaria de 100 arquivos PDF.x=np.array(df.a)
ey=np.array(df.b.dropna())
basicamente acabou sendoplt.hist([x, y], weights=[np.ones_like(x)/len(x), np.ones_like(y)/len(y)])
No caso de você ter diferentes tamanhos de amostra, pode ser difícil comparar as distribuições com um único eixo y. Por exemplo:
Nesse caso, você pode plotar seus dois conjuntos de dados em diferentes eixos. Para fazer isso, você pode obter os dados do histograma usando matplotlib, limpar o eixo e plotá-lo novamente em dois eixos separados (deslocando as bordas da bandeja para que não se sobreponham):
fonte
Como conclusão da resposta de Gustavo Bezerra :
Se você deseja que cada histograma seja normalizado (
normed
para mpl <= 2.1 edensity
para mpl> = 3.1 ), você não pode apenas usarnormed/density=True
, você precisa definir os pesos para cada valor:Como comparação, exatamente o mesmo
x
ey
vetores com pesos padrão edensity=True
:fonte
Você deve usar
bins
os valores retornados porhist
:fonte
Aqui está um método simples para plotar dois histogramas, com suas barras lado a lado, no mesmo gráfico quando os dados tiverem tamanhos diferentes:
fonte
Parece que você pode querer apenas um gráfico de barras:
Como alternativa, você pode usar subtramas.
fonte
Apenas no caso de você ter pandas (
import pandas as pd
) ou concordar em usá-lo:fonte
Há uma ressalva quando você deseja plotar o histograma a partir de uma matriz numpy 2D. Você precisa trocar os 2 eixos.
fonte
Esta pergunta foi respondida anteriormente, mas você deseja adicionar outra solução rápida / fácil que possa ajudar outros visitantes a esta pergunta.
Alguns exemplos úteis estão aqui para comparação entre kde e histograma.
fonte
Inspirada na resposta de Salomão, mas para manter a pergunta relacionada ao histograma, uma solução limpa é:
Certifique-se de plotar o mais alto primeiro, caso contrário, você precisará definir plt.ylim (0,0.45) para que o histograma mais alto não seja cortado.
fonte
Também uma opção bastante semelhante à resposta de joaquin:
Fornece a seguinte saída:
fonte