Python,在csv文件中绘制所有列与第一列(日期)的关系图

时间:2016-04-06 06:57:45

标签: python csv numpy matplotlib plot

我的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

我想将colomns 3到8与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?

编辑:我已在下面发布了代码(解决方案)

2 个答案:

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

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