如何绘制以下数据:

时间:2017-03-21 13:36:57

标签: python csv matplotlib

我在以下csv表中有数据。尽管在python中绘图是相当棘手的。我可以手动删除一些标题行,然后绘制一些数据与时间的关系,但时间是字符串格式,并以分钟和小时分隔...

我删除标题行后尝试选择数据的第一列,但收到unhashable type: slice错误消息。

如果我将时间数据分开,我可以使用这种代码:

def get_sec(time_str):
    h, m, s = time_str.split(':')
    return int(h) * 3600 + int(m) * 60 + float(s)

一旦我将所有数据都放在一个数组(矩阵)中,那么从那时起,我就可以创建一个图:

plt.plot(data[:,0],data[:,1],'r',data[:,0],data[:,2],...

如果我可以自动处理标题,那会更好,但这不是什么大问题。以下是一些数据:

00:00:00.000  0.002  0.003    0.002  7.74  8.04    7.74   160.44
00:00:00.008  0.001  0.003    0.003  7.74  8.34    8.04  160.245   
00:00:00.016  0.001  0.003    0.002  7.74  8.34    7.74  160.065   
00:00:00.024  0.002  0.003    0.002  7.74  8.04    7.74  160.245   
00:00:00.032  0.001  0.003    0.002  7.74  8.04    8.04  159.705   
00:00:00.040  0.002  0.003    0.002  7.44  8.04    8.04  160.245 

1 个答案:

答案 0 :(得分:0)

假设您的数据保存在一个看起来像这样的文件中

time colA colB colC colD valueA valueB valueC
00:00:00.000  0.002  0.003    0.002  7.74  8.04    7.74   160.44
00:00:01.008  0.001  0.003    0.003  7.74  8.34    8.04  160.245   
00:00:02.016  0.001  0.003    0.002  7.74  8.34    7.74  160.065   
00:00:03.024  0.002  0.003    0.002  7.74  8.04    7.74  160.245   
00:00:04.032  0.001  0.003    0.002  7.74  8.04    8.04  159.705   
00:00:05.040  0.002  0.003    0.002  7.44  8.04    8.04  160.245

您可以使用 pandas 读取数据,并使用matplotlib绘制,如下所示:

import pandas as pd
import matplotlib.pyplot as plt

fn = "data/timetable.txt"
df = pd.read_csv(fn,delim_whitespace=True, parse_dates=True )
df["time"] = pd.to_datetime(df["time"], format="%H:%M:%S.%f")

plt.plot(df["time"], df["valueA"])
plt.plot(df["time"], df["valueB"])

plt.show()

enter image description here