我一直在寻找一个很好的解决方案,其中一个线程正在泵送数据,我们希望Jupyter笔记本不断更新图形,而不阻止任何事情。在查阅了十几个相关答案后,以下是一些发现:
小心
如果你想要一个实时的图表,不要使用下面的魔术。如果笔记本使用以下内容,则图形更新不起作用:%load_ext autoreload
%autoreload 2
在导入matplotlib之前,您需要在笔记本中使用以下魔法:%matplotlib notebook
方法1:使用FuncAnimation
这有一个缺点,即即使数据尚未更新,也会发生图形更新。下面的示例显示了另一个线程在Jupyter笔记本通过FuncAnimation更新图形时更新数据。%matplotlib notebook
from matplotlib import pyplot as plt
from matplotlib.animation import FuncAnimation
from random import randrange
from threading import Thread
import time
class LiveGraph:
def __init__(self):
self.x_data, self.y_data = [], []
self.figure = plt.figure()
self.line, = plt.plot(self.x_data, self.y_data)
self.animation = FuncAnimation(self.figure, self.update, interval=100