从python中的csv绘制特定天数

时间:2016-04-11 14:45:49

标签: python date csv matplotlib plot

我对python中的matplotlib相当新。我正在读一个包含每日日志的csv文件。但是,多行可能包含同一日期的数据。例如07.04.2016

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月8日的数据。我该如何实现这个功能?

1 个答案:

答案 0 :(得分: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])