我正在构建一个每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)
答案 0 :(得分:2)
matplotlib中有一个模块专门用于随时间变化的图:https://matplotlib.org/api/animation_api.html
基本上,您定义了一个更新函数,用于更新行对象的数据。然后可以使用该更新函数创建一个FuncAnimation对象,该对象每隔x毫秒自动调用更新函数:
ani = FuncAnimation(figure, update_function, repeat=True, interval=x)