2010-04-07 7 views
5

Tôi muốn tạo Biểu đồ trong Matplotlib từ tệp đầu vào chứa dữ liệu thô (.txt). Tôi đang đối mặt với các vấn đề trong việc đề cập đến tệp đầu vào. Tôi đoán nó nên là một chương trình khá nhỏ. Bất kỳ Matplotlib rất kinh nghiệm, bất kỳ giúp đỡ?Biểu đồ trong Matplotlib với tệp đầu vào

Tôi không yêu cầu mã, một số yếu tố đầu vào sẽ đưa tôi đi đúng hướng!

Trả lời

9

tôi khuyên bạn nên sử dụng 'loadtxt' thực tế trong thư viện NumPy. Có các hàm liên quan trong Matplotlib (csv2rec) nhưng Matplotlib thực sự là chuẩn hóa trên loadtxt.

Dưới đây là cách hoạt động:

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', đối tượng trở về từ 'loadtxt', là một n x m NumPy mảng.

'loadtxt' chấp nhận tệp hoặc bộ mô tả tệp. Ví dụ trên có hầu hết chữ ký phương thức. 'skiprows' là số nguyên chỉ định số hàng đếm từ đầu bạn muốn bỏ qua; thông thường đặt nó là "1" để bỏ qua hàng tiêu đề; 'usecols' bắt đầu tại '0' và là danh sách đọc các cột bạn muốn đưa vào ('Không' là mặc định và có nghĩa là 'bao gồm tất cả'). Các tham số khác hoạt động như mong đợi.

Để vẽ một biểu đồ từ dữ liệu này:

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: Rất cám ơn – Arkapravo

+0

bạn nên luôn sử dụng 'genfromtxt' thay vì loadtxt, đặc biệt khi xử lý các tệp lớn, vì nó có cùng hành vi mặc định nhưng có thể nhanh gấp 20 lần. –

0

Bạn không thể trực tiếp yêu cầu matplotlib tạo biểu đồ từ tệp đầu vào - bạn sẽ cần tự mở tệp và lấy dữ liệu từ đó. Cách bạn thực hiện điều đó phụ thuộc vào định dạng của tệp - nếu đó chỉ là một tệp có số trên mỗi dòng, bạn có thể xem qua từng dòng, strip() dấu cách và dòng mới và sử dụng float() để chuyển đổi thành số.

+0

@Daniel G: đã làm điều đó, nhưng nó được khá lộn xộn! – Arkapravo

+1

@Arkapravo - Đúng, và tôi đã không nhận ra về giải pháp của doug - sử dụng :) –