2012-04-17 64 views
1

我很初學Python和matplotlib,但試圖學習!我想使用matplotlib來繪製CSV中的一些簡單數據,其中包含具有頻率的日期。 X軸包含日期和Y包含頻率。從CSV示例數據:pyplotlib使用matplotlib的日期

2011/12/15,5 
2011/12/11,4 
2011/12/19,2 

我查了「matplotlib.sf.net/examples」出來的,但似乎所有的測試數據是從HTTP GET下載。我真的很感激,如果有人可以指導我一些如何閱讀(大概使用CSV閱讀器)的示例代碼,並在圖表中顯示數據。

謝謝!

+0

你想如何表示數據?直方圖?示例數據是從CSV文件複製並粘貼的嗎?我假設你在同一個單元格中有X和Y值? – Harpal 2012-04-17 22:07:02

+0

另外,數據全部在一行上嗎? – Harpal 2012-04-17 22:11:40

+0

Harpal - 感謝您的迴應。理想情況下,將其放在折線圖中會很棒。這對於X和Y來說是正確的,但我可以按照其存儲在CSV中的方式進行修改,使其更容易以其他方式生成。謝謝。 – user1314011 2012-04-17 22:13:51

回答

1

我試圖讓我的代碼儘可能簡單,這絕不是優雅的,但在這裏你去:

import csv 
import matplotlib.pyplot as plt 

### Making test CSV file ### 
data = [['2011/12/15,5'],['2011/12/11,4'],['2011/12/19,2'],['2011/12/16,3'],['2011/12/20,8'],['2011/12/14,4'],['2011/12/10,10'],['2011/12/9,7']] 
with open('test.csv', 'wb') as f: 
    writer = csv.writer(f) 
    for i in data: 
     writer.writerow(i) 


### Extract data from CSV ### 
with open('test.csv', 'rb') as n: 
    reader = csv.reader(n) 
    dates = [] 
    freq = [] 
    for row in reader: 
     values = row[0].split(',') 
     dates.append(values[0]) 
     freq.append(values[1])   


### Do plot ### 
false_x = [x for x in range(len(dates))] 
plt.plot(false_x,freq, 'o-') 
plt.xticks(range(len(dates)), (dates), rotation=45) 
# plt.axis([xmin, xmax, ymin, ymax]) - sets axes limits on graph 
plt.axis([-1, 8, 0, 11]) 
plt.show() 

這使得:

enter image description here

+0

謝謝sooo多。很有幫助! – user1314011 2012-04-17 23:52:45

+0

本示例使用csv.reader並手動分割行,這不是必需的,並且可能會導致某些csv文件出現問題。有一個關於它的問題[這裏](https://stackoverflow.com/questions/46968044/why-do-i-need-to-add-quotes-to-this-csv-file/46968154#46968154)詳細的解釋。 Harpal的答案幫助我進入了matplotlib。 – trueCamelType 2017-10-27 05:50:01

2

也許你尋找類似的東西:

import csv 
import datetime as dt 
import matplotlib.pyplot as plt 

arch = 'C:\\Python26\\programas\\test.csv' 
data = csv.reader(open(arch)) 

data = [(dt.datetime.strptime(item, "%Y/%m/%d"), float(value)) for item, value in data] 
data.sort() 
[x, y] = zip(*data) 

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.plot(x, y) 

ax.grid(True) 
fig.autofmt_xdate() 

plt.show() 

enter image description here

+0

再次感謝您 – user1314011 2012-04-17 23:53:53