2012-01-11 20 views
20

Ho una matrice di int NumPy rappresentano periodi di tempo, che sono attualmente tracciatura in un istogramma di ottenere un bel grafico di distribuzione, utilizzando il codice seguente:grafico Trama dai dati di istogramma in matplotlib

ax.hist(data,bins=100,range=(minimum,maximum),facecolor="r") 

Comunque sto provando a modificare questo grafico per rappresentare esattamente gli stessi dati usando una linea invece di barre, così posso sovrapporre più campioni allo stesso grafico e farli essere chiari (altrimenti le barre si sovrappongono l'una all'altra). Quello che ho provato finora è quello di raccogliere la matrice di dati in un array di tuple contenenti (tempo, count), e poi tracciare utilizzando

ax.plot(data[:,0],data[:,1],color="red",lw=2) 

Tuttavia questo non mi sta dando qualcosa di vicino, come non posso simulare accuratamente l'opzione bin della istogramma nella mia trama. C'è un modo migliore per farlo?

risposta

31

È possibile salvare l'output di hist e poi tracciare esso.

import numpy as np 
import pylab as p 

data=np.array(np.random.rand(1000)) 
y,binEdges=np.histogram(data,bins=100) 
bincenters = 0.5*(binEdges[1:]+binEdges[:-1]) 
p.plot(bincenters,y,'-') 
p.show() 
+0

perfetto, esattamente quello che stavo cercando! Grazie! – CNeo

+0

Un modo per ottenere questo come barre, non come una linea? Sto calcolando gli istogrammi per persone diverse, poi facendo la media, quindi ho un conteggio medio e voglio costruire un grafico a barre dall'istogramma. – Amyunimus

+0

Sicuro. Usa 'p.bar (bincenters, y, align = 'center')'. Controlla http://stackoverflow.com/a/12182440/302369 per i dettagli. – imsc

0

Prova ax.plot(zip(*data)[:][0],zip(*data)[:][1],color="red",lw=2)

Problemi correlati