2016-01-27 7 views
6

Ho provato a cercare qualcosa di simile e la cosa più vicina che ho trovato è stata this che mi ha aiutato ad estrarre e manipolare i dati, ma ora non riesco a capire come per ri-tracciare l'istogramma. Ho una serie di tensioni e per prima cosa ho tracciato un istogramma di occorrenze di tali tensioni. Voglio invece creare un istogramma di eventi all'ora (quindi l'asse y di un normale istogramma diviso per il numero di ore di cui ho preso i dati) e quindi riformulare l'istogramma con i dati manipolati .Istogrammi Python: normalizzare manualmente i conteggi e ripetere il tracciamento come istogramma

Possiedo un array che contiene il numero di eventi per ora (composto dall'asse y originale da pyplot.hist diviso per il numero di ore di acquisizione dati) e dai raccoglitori dall'istogramma. Ho composto che array utilizzando il codice seguente (preso dalla risposta linkato sopra):

import numpy 
import matplotlib.pyplot as pyplot 
mydata = numpy.random.normal(-15, 1, 500)  # this seems to have to be 'uneven' on either side of 0, otherwise the code looks fine. FYI, my actual data is all positive 
pyplot.figure(1) 
hist1 = pyplot.hist(mydata, bins=50, alpha=0.5, label='set 1', color='red') 
hist1_flux = [hist1[0]/5.0, 0.5*(hist1[1][1:]+hist1[1][:-1])] 
pyplot.figure(2) 
pyplot.bar(hist1_flux[1], hist1_flux[0]) 

Questo codice non corrisponde esattamente quello che sta succedendo nel mio codice; i miei dati sono composti da 1000 matrici di 1000 punti dati ciascuna (tensioni). Ho realizzato degli istogrammi di questo, che mi danno il numero di occorrenze di un dato intervallo di tensione (o larghezza del contenitore). Tutto quello che voglio fare è replot un istogramma del numero di eventi per ora (quindi yaxisdell'istogramma/5 ore) con la stessa larghezza bin originale, ma quando mi divido hist1[0]/5 e replot nel sopra, la "larghezza del cestino" è completamente sbagliata.

Mi sembra che ci debba essere un modo più semplice per farlo, piuttosto che sostituire manualmente i miei istogrammi.

Grazie in anticipo, e mi dispiace davvero se ho perso qualcosa di ovvio.

Il problema, illustrato in uscita del mio codice di esempio e il mio dati originali è la seguente:

trame superiori: codice di uscita snippet.
Punti inferiori: I miei dati effettivi. Upper plots: code snippet output. Lower plots: My actual data.

risposta

3

È perché la funzione bar prende un argomento width, che di default è 0.8 (plt.bar(left, height, width=0.8, bottom=None, hold=None, **kwargs)), quindi è necessario cambiare per la distanza tra le due barre:

pyplot.bar(hist1_flux[1], hist1_flux[0], 
      width=hist1_flux[1][1] - hist1_flux[1][0]) 
+0

brillante, questo risolve perfettamente , Sapevo che mi mancava qualcosa ma non sapevo cosa fosse. Grazie mille. Sono sorpreso che non vi sia un modo più semplice per manipolare manualmente tutti i valori y in pyplot.hist; sembra qualcosa che sarebbe naturale aggiungere. –

Problemi correlati