如何从文本文件用Python绘制数据

2 投票
2 回答
7132 浏览
提问于 2025-04-18 13:43

我有一个文本文件,里面有大约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 对象被当作对象存储了。其他的数据则按照你指定的数据类型存储。

撰写回答