如何从文本文件用Python绘制数据
我有一个文本文件,里面有大约5万行来自传感器的数据,这些传感器连接在一个树莓派上。数据大概是这样的:
2014-07-16 15:57:35.536579, 128, 251, 254, 255, 30.062
2014-07-16 15:57:37.763030, 132, 252, 250, 255, 30.062
2014-07-16 15:57:39.993090, 135, 249, 239, 255, 30.125
2014-07-16 15:57:42.224499, 142, 251, 221, 255, 30.125
2014-07-16 15:57:44.452908, 152, 252, 199, 255, 30.187
2014-07-16 15:57:46.683009, 162, 246, 189, 255, 30.187
简单来说,从左到右依次是日期和时间、传感器1、传感器2、传感器3、传感器4、传感器5。我想用Python来画图,我听说过matplotlib这个库可以用来绘制图表。但是,我该如何从文本文件中绘制这些数据呢?我想在x轴上显示时间戳,在y轴上显示不同传感器的数据,并把它们放在同一个图表里。我对matplotlib完全没有经验。
关于读取文本文件,我在想可以用这样的方式:
line = file.readlines()
new_line = line.strip(", ")
date = new_line[0]
sensor1 = new_line[1]
#and so on
2 个回答
2
我建议使用pandas(这东西跟R有点像)。假设你的输入数据在一个叫做'data.csv'的文件里:
import pandas as pd
df = pd.read_csv('data.csv', parse_dates=True,index_col=0,
names = ['timestamp','x','y','z','w','k'])
df.plot()
1
如果你不想安装 pandas
,可以用“纯 NumPy”的方法来解决这个问题,具体代码如下:
import numpy as np
import datetime
# date field conversion function
dateconv = lambda s: datetime.strptime(s, '%Y-%M-%D %H:%M:%S:.%f')
col_names = ["Timestamp", "val1", "val2", "val3", "val4", "val5"]
dtypes = ["object", "uint8", "uint8", "uint8", "uint8", "float"]
mydata = np.genfromtxt("myfile.csv", delimiter=',', names=col_names, dtype=dtypes, converters={"Time": dateconv})
执行完这段代码后,mydata
的内容会变成:
array([('2014-07-16 15:57:35.536579', 128, 251, 254, 255, 30.062),
('2014-07-16 15:57:37.763030', 132, 252, 250, 255, 30.062),
('2014-07-16 15:57:39.993090', 135, 249, 239, 255, 30.125),
('2014-07-16 15:57:42.224499', 142, 251, 221, 255, 30.125),
('2014-07-16 15:57:44.452908', 152, 252, 199, 255, 30.187),
('2014-07-16 15:57:46.683009', 162, 246, 189, 255, 30.187)],
dtype=[('Timestamp', 'O'), ('val1', 'u1'), ('val2', 'u1'), ('val3', 'u1'), ('val4', 'u1'), ('val5', '<f8')])
现在你可以试试,比如输入 mydata['val5']
:
array([ 30.062, 30.062, 30.125, 30.125, 30.187, 30.187])
现在,datetime.datetime
对象被当作对象存储了。其他的数据则按照你指定的数据类型存储。