【问题标题】:How to plot data with Python from text file如何使用 Python 从文本文件中绘制数据
【发布时间】:2016-02-29 13:58:58
【问题描述】:

我有一个文本文件,其中包含来自连接到树莓派的传感器的近 50k 行数据。它看起来像这样:

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

【问题讨论】:

  • gnuplot 可以直接执行此操作。从 gnuplot 内部:set timefmt "%Y-%m-%d %H:%M:%S"; set xdata time;plot 't.gp' using 1:2

标签: python matplotlib plot


【解决方案1】:

我建议使用 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()

【讨论】:

    【解决方案2】:

    如果不想安装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 对象现在存储为对象。其他所有内容都以您指定的数据类型存储。

    【讨论】:

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