2016-04-11 41 views
0

我對python中的matplotlib相當陌生。我正在閱讀包含每日日誌的csv文件。但是多行可能包含相同日期的數據。 e.g 2016年4月7日從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;627;21;82;103;20;102 
04.04.2016;08:43:20;727;61;82;223;20;103 
05.04.2016;08:43:20;227;71;82;263;20;104 
06.04.2016;08:43:20;427;61;82;273;20;105 
07.04.2016;08:43:20;177;51;22;103;80;106 
07.04.2016;09:43:20;247;51;42;183;20;108 
07.04.2016;10:43:20;127;51;82;103;20;106 
08.04.2016;08:43:20;727;61;82;603;20;107 

我有一個控制變量NUM_DAYS指定需要安裝最新版本天的數據有多少使用matplotlib繪製。

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 = {} 
num_days = 5 

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_date(dates[-num_days:], values[-num_days:], label=key, fmt='-') 

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

在我的代碼中,它只繪製了最新的行數,而不是最新的日期數。在上面的例子中,它只會繪製最後5行。但是,它應該繪製從2016年4月4日至2016年4月4日的數據。我怎樣才能實現這個功能?

回答

0

您可以使用datetime.timedeltadoc),例如:

import datetime 
date_to = max(dates) 
date_from = date_to - datetime.timedelta(days=num_days) 
item_count = len([d for d in dates if d >= date_from])