我对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日的数据。我该如何实现这个功能?
答案 0 :(得分:0)
您可以使用datetime.timedelta
(doc),例如:
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])