2010-04-07 4 views
5

Я хочу сделать гистограмму в Matplotlib из входного файла, содержащего необработанные данные (.txt). Я сталкиваюсь с проблемами при обращении к входному файлу. Думаю, это должна быть небольшая программа. Любые гуру Matplotlib, любая помощь?Гистограмма в Matplotlib с входным файлом

Я не прошу код, некоторые входы должны поставить меня на правильный путь!

ответ

9

Я бы рекомендовал использовать 'loadtxt', который фактически находится в библиотеке NumPy. В Matplotlib (csv2rec) есть связанные функции, но Matplotlib фактически стандартизирует loadtxt.

Вот как это работает:

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', объект, возвращаемый из 'loadtxt', представляет собой массив NumPy м п х.

«loadtxt» принимает файл или файловый дескриптор. В приведенном выше экземпляре имеется большая часть подписи метода. «skiprows» - это целое число, определяющее количество строк, считанных сверху, которое вы хотите пропустить; обычно устанавливается значение «1», чтобы пропустить строку заголовка; «usecols» начинается с «0» и представляет собой список, в котором перечислены столбцы, которые вы хотите включить («None» является значением по умолчанию, и означает «include all»). Остальные параметры работают так, как ожидалось.

Для построения гистограммы из этих данных:

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: Many Thanks – Arkapravo

+0

вы всегда должны использовать 'genfromtxt' вместо loadtxt, особенно при работе с большими файлами, так как он имеет одинаковые по умолчанию, но может быть в 20 раз быстрее. –

0

Вы не можете напрямую указать matplotlib для создания гистограммы из входного файла - вам нужно будет открыть файл самостоятельно и получить данные от него. Как вы это сделаете, это зависит от формата файла - если это всего лишь файл с номером в каждой строке, вы можете просто пройти через каждую строку,, а также использовать строки float(), чтобы преобразовать их в число.

+0

@Daniel G: Сделал это, но это становится довольно грязным! – Arkapravo

+1

@Arkapravo - правда, и я не понял о решении doug - используйте это :) –

Смежные вопросы