2016-04-06 88 views
0

繪製的所有列VS第一列(日期)我有csv文件,它看起來像Python中,在一個CSV文件

> 01.04.2016;08:39:09;527;61;42;203;20;211 
> 02.04.2016;08:43:03;527;51;82;323;80;161 
> 03.04.2016;08:43:20;527;61;82;203;20;101 

我想3繪製colomns到8 VS colomn 1.所以,最後,該圖應該顯示6條相對於日期的線條。

我用下面的命令來讀取csv文件

PlotList = np.loadtxt('myfile.csv',unpack = True, delimiter =';', converters={ 0 : mdates.strpdate2num('%d.%m.%Y') , 1 : mdates.strpdate2num('%H:%M:%S')}) 

,我試圖用plt.plot_date(PlotList[0],PlotList[1]),但它並沒有給渴望的結果。

如何繪製所有6個colomns與日期?

編輯:我已經發布的代碼(解決方案)以下

回答

0
import csv 
import datetime as dt 
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 

col_names = ["a","b","c","d","e","f"] 
my_dict = {} 

for item in range(0, 6): 
    my_dict[col_names[item]] = [] 

with open("myfile.csv","r") as f: 
    spamreader = csv.reader(f,delimiter=";") 
    for row in spamreader: 
     for col in range(2 , len(row)): 
      my_dict[col_names[col-2]].append([row[0],row[col]]) 
f.close() 

for key, data_list in my_dict.items(): 
    dates_str, values = zip(*data_list) 
    dates = [dt.datetime.strptime(d,'%d.%m.%Y').date() for d in dates_str] 
    plt.plot(dates, values, label=key) 

plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%d.%m.%Y')) 
plt.gca().xaxis.set_major_locator(mdates.AutoDateLocator()) 
plt.gcf().autofmt_xdate() 
2

快速的答案,用熊貓:

data = StringIO.StringIO('''date;time;a;b;c;d;e;f 
          01.04.2016;08:39:09;527;61;42;203;20;211 
          02.04.2016;08:43:03;527;51;82;323;80;161 
          03.04.2016;08:43:20;527;61;82;203;20;101''') 
dataframe = pd.read_csv(data, sep=';', index_col=0, parse_dates=True) 
dataframe.plot() 
plt.gcf().set_size_inches(8,3) 
plt.gcf().tight_layout() 

這將產生如下圖: enter image description here

+0

我要從csv文件中讀取數據 – Sha

+0

用read_csv替換StringIO對象與文件名:) – Ove

+0

我將代碼更新爲實際ly將第一列解析爲日期,而不僅僅是字符串。 – Ove

相關問題