Python和matplotlib

时间:2015-07-05 15:09:32

标签: python matplotlib

我不熟悉Python中的matplotlib。我想要实现的是使用文本文件随时间绘制数据,该文件每隔一定时间接收新数据。

文本文件格式如下:

数据,时间

1,2015-07-05 11:20:00

到目前为止我所拥有的:

import matplotlib.pyplot as plt
import matplotlib.dates as md
import dateutil

pullData = open('sampleText.txt', 'r').read()
dataArray = pullData.split('\n')

datestrings = []
plt_data = []

for eachLine in dataArray:
    if len(eachLine)>1:
        y,x = eachLine.split(',')
        plt_data.append(int(y))
        datestrings.append(x)

dates = [dateutil.parser.parse(s) for s in datestrings]

plt.subplots_adjust(bottom=0.2)
plt.xticks( rotation=25 )

ax=plt.gca()
ax.set_xticks(dates)

xfmt = md.DateFormatter('%m-%d %H:%M')
ax.xaxis.set_major_formatter(xfmt)
plt.plot(dates,plt_data, "o-")
plt.show()

这几乎是我可以通过不同的教程/以前的问题得到的。

正如您所看到的,此代码适用于随时间绘制数据,但我不了解如何以图表使用新数据更新自身的方式对其进行调整。

2 个答案:

答案 0 :(得分:0)

假设正在写入您的文本文件,并附加新数据。

然后,您可以使用inotify在文件被修改时发出警报并且“挂起”#39;该事件的一个功能,用于更新图表。

查看this page,其中有几个关于如何使用pyinotify捕获事件的示例。还提供了minimal example,其显示了'结构'你的计划:

def isGood(linesForItem)
    return not any(map(lambda o: 'ERROR' in o, linesForItem))

最重要的是,pyinotify.ALL_EVENTS可以更改为listen 仅限于您感兴趣的事件(例如文件修改或 如果文件尚不存在则创建

答案 1 :(得分:0)

您可以使用function animation执行此操作,也可以使用此代码:

line, = ax.plot(dates,plt_data, "o-")
plt.show(block=False)

while True:
  # use some method as the one proposed by jcoppens to read your new data
  line.set_data(new_dates, new_data)
  # timeout/sleep until new data arrives