【问题标题】:Plotting specific number of days from a csv in python从python中的csv绘制特定天数
【发布时间】:2016-04-11 14:45:49
【问题描述】:

我对 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 行。但是,它应该绘制从 04.04.2016 到 08.04.2016 的数据。我怎样才能实现这个功能?

【问题讨论】:

    标签: python date csv matplotlib plot


    【解决方案1】:

    您可以使用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])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多