2010-04-07 21 views
5

Ich möchte ein Histogramm in Matplotlib aus einer Eingabedatei erstellen, die die Rohdaten (.txt) enthält. Ich habe Probleme beim Verweisen auf die Eingabedatei. Ich denke, es sollte ein eher kleines Programm sein. Irgendwelche Matplotlib-Gurus, irgendwelche Hilfe?Histogramm in Matplotlib mit Eingabedatei

Ich frage nicht nach dem Code, einige Eingaben sollten mich auf den richtigen Weg bringen!

Antwort

9

Ich würde 'loadtxt' empfehlen, die tatsächlich in der NumPy-Bibliothek ist. Es gibt verwandte Funktionen in Matplotlib (csv2rec), aber Matplotlib standardisiert tatsächlich auf loadtxt.

Hier ist, wie es funktioniert:

from matplotlib import pyplot as PLT 

with open('name_of_your_file.csv') as f: 
    v = NP.loadtxt(f, delimiter=",", dtype='float', comments="#", skiprows=1, usecols=None) 

'v', das Objekt von 'loadtxt' ergab, ist eine n x m NumPy Array.

'loadtxt' akzeptiert entweder eine Datei oder einen Dateideskriptor. Die obige Instanz hat den größten Teil der Methodensignatur. 'skiprows' ist eine Ganzzahl, die die Anzahl der Zeilen angibt, die von oben gezählt werden und die übersprungen werden sollen. es ist üblich, es auf "1" zu setzen, um die Kopfzeile zu überspringen; 'usecols' beginnt bei '0' und ist eine Liste mit den Spalten, die Sie einschließen möchten ('None' ist die Standardeinstellung und bedeutet 'Alle einschließen'). Die anderen Parameter funktionieren wie erwartet.

Um ein Histogramm aus diesen Daten plotten:

from matplotlib import pyplot as PLT 

v_hist = NP.ravel(v) # 'flatten' v 
fig = PLT.figure() 
ax1 = fig.add_subplot(111) 

n, bins, patches = ax1.hist(v_hist, bins=50, normed=1, facecolor='green') 
PLT.show() 
+0

@doug: Vielen Dank – Arkapravo

+0

sollten Sie immer 'genfromtxt' anstelle von loadtxt verwenden, vor allem bei großen Dateien, da es das gleiche hat Standardverhalten kann aber 20 mal so schnell sein. –

0

Sie können matplotlib nicht direkt anweisen, ein Histogramm aus einer Eingabedatei zu erstellen - Sie müssen die Datei selbst öffnen und die Daten daraus abrufen. Wie Sie das tun, hängt vom Format der Datei ab - wenn es nur eine Datei mit einer Nummer in jeder Zeile ist, können Sie einfach jede Zeile, strip() Leerzeichen und Zeilenumbrüche durchlaufen und float() verwenden, um sie in eine Zahl zu konvertieren.

+0

@ Daniel G: Hat das, aber es wird ziemlich chaotisch! – Arkapravo

+1

@Arkapravo - True, und ich hatte nicht über Dougs Lösung realisiert - verwenden Sie das :) –