Python3x + MatPlotLib - 更新图表?

时间:2014-06-02 20:46:29

标签: python-3.x matplotlib

我是python和matplotlib语言的新手,为我丈夫做点什么。

我希望你们能帮助我。

我想使用Open提取文件,阅读它,并使用它的值更新图表。

听起来很简单吧?在实践中并没有那么多。

这是我到目前为止打开并绘制文件图表的内容。这样可以正常工作1次。

import matplotlib.pyplot as plt
fileopen = open('.../plotresults.txt', 'r').read()
fileopen = eval(fileopen) ##because the file contains a dict and security is not an issue.
print(fileopen)  ## So I can see it working
for key,value in fileopen.items():
    plot1 = value
    plt.plot(plot1, label=str(key))
plt.legend()
plt.show()

现在我想动画图表或更新它,以便我可以看到数据的变化。我试图使用matplotlib的动画功能,但它超出了我目前的知识。

是否有一种简单的方法来更新此图表,比如说每5分钟一次?

注意: 我尝试使用Schedule但它打破了程序(可能是计划之间的冲突,并且matplotlib数字打开了?)。

任何帮助都将深表感谢。

1 个答案:

答案 0 :(得分:0)

不幸的是,您只是浪费时间尝试使用matplotlib的动画功能或使用matplotlib OO界面来获得一个干净的解决方案,而不是

作为一个肮脏的黑客你可以使用以下内容:

from threading import Timer

from matplotlib import pyplot as plt
import numpy

# Your data generating code here
def get_data():
    data = numpy.random.random(100)
    label = str(data[0]) # dummy label
    return data, label

def update():
    print('update')
    plt.clf()
    data, label = get_data()
    plt.plot(data, label=label)
    plt.legend()
    plt.draw()
    t = Timer(0.5, update) # restart update in 0.5 seconds
    t.start()

update()
plt.show()

然后通过Timer旋转第二个线程。所以要杀死脚本,你必须在控制台上点击Ctrl-C两次。

如果在pyplot机器的范围内以这种简单的方式有更清洁的方法,我自己会感兴趣。

斜体编辑。