2012-04-17 9 views
1

私はPythonとmatplotlibで非常に初心者ですが、勉強しようとしています!私はmatplotlibを使用して、周波数を含む日付を含むCSVからの簡単なデータをプロットしたいと考えています。日付を含むX軸と周波数を含むY。 CSVからのデータの例:matplotlibを使ったPythonプロットの日付

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

私は「matplotlib.sf.net/examples」をチェックしますが、すべてのテストデータはHTTP GETからダウンロードされ表示されます。私は誰かが(おそらくCSVリーダーを使用して)読み込み、チャートにデータを表示する方法のいくつかのサンプルコードで私を導くことができたら本当に感謝します。

ありがとうございました!

私は、できるだけ簡単な私のコードを維持しようとしました、これは決してエレガントであるが、ここであなたが行く
+0

どのようにデータを表現しますか?ヒストグラム?サンプルデータはコピーしてCSVファイルから貼り付けますか?同じセルにXとYの値があると仮定していますか? – Harpal

+0

また、データはすべて1行にありますか? – Harpal

+0

ハープル - 応答ありがとう。理想的には、折れ線グラフで表示することは素晴らしいことです。それはXとYに関しては正しいですが、CSVに保存されている方法を、別のやり方であればどんな形式にでもマッサージすることができます。ありがとうございました。 – user1314011

答えて

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

ありがとうございます。非常に役立ちます! – user1314011

+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

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

関連する問題