新数据到货时如何更新Matplotlib图?

时间:2017-06-30 15:49:38

标签: python matplotlib

我正在构建一个每30秒从互联网上获取数据的机器人。

我想使用matplotlib绘制这些数据,并且能够在我获取一些新数据时更新图形。

在我的脚本开头我初始化我的情节。 然后我运行一个函数来每30秒更新一次这些图,但我的情节窗口此时会冻结。

我做过一些研究,但似乎找不到任何可行的解决方案:

plt.show(block=False)
plt.pause(0.001)

我做错了什么?

代码的一般结构:

import matplotlib.pyplot as plt
import time

def init_plots():
    global fig
    global close_line

    plt.ion()
    fig = plt.figure()
    main_fig = fig.add_subplot(111)

    x = [datetime.fromtimestamp(x) for x in time_series]
    close_line, = main_fig.plot(x, close_history, 'k-')
    plt.draw()


def update_all_plots():
    global close_line

    x = [datetime.fromtimestamp(x) for x in time_series]

    close_line.set_xdata(time_series)
    close_line.set_ydata(close_history)

    plt.draw()


# SCRIPT :
init_plots()
while(True):
     # Fetch new data...
     # Update time series...
     # Update close_history...
     update_plots()
     time.sleep(30)

1 个答案:

答案 0 :(得分:2)

matplotlib中有一个模块专门用于随时间变化的图:https://matplotlib.org/api/animation_api.html

基本上,您定义了一个更新函数,用于更新行对象的数据。然后可以使用该更新函数创建一个FuncAnimation对象,该对象每隔x毫秒自动调用更新函数:

ani = FuncAnimation(figure, update_function, repeat=True, interval=x)