我不熟悉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()
这几乎是我可以通过不同的教程/以前的问题得到的。
正如您所看到的,此代码适用于随时间绘制数据,但我不了解如何以图表使用新数据更新自身的方式对其进行调整。
答案 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