使用Matplotlib在Jupyter Lab 3中实时绘图

使用Matplotlib在Jupyter Lab 3中实时绘图,matplotlib,jupyter-lab,ipywidgets,Matplotlib,Jupyter Lab,Ipywidgets,我想动态更新单元格的绘图。也就是说,绘图在单元格开始处初始化,并在(计算量大的)for循环中更新,显示计算的进展情况。在jupyter笔记本中,可以使用 %matplotlib笔记本 将numpy作为np导入 将matplotlib.pyplot作为plt导入 导入时间 def pltsin(ax,颜色=['b']): x=np.linspace(0,1100) 如果是ax.lines: 对于ax.lines中的行: 行。设置扩展数据(x) y=np.random.random(大小=(100,

我想动态更新单元格的绘图。也就是说,绘图在单元格开始处初始化,并在(计算量大的)for循环中更新,显示计算的进展情况。在jupyter笔记本中,可以使用

%matplotlib笔记本
将numpy作为np导入
将matplotlib.pyplot作为plt导入
导入时间
def pltsin(ax,颜色=['b']):
x=np.linspace(0,1100)
如果是ax.lines:
对于ax.lines中的行:
行。设置扩展数据(x)
y=np.random.random(大小=(100,1))
行。设置数据(y)
其他:
对于颜色中的颜色:
y=np.random.random(大小=(100,1))
ax.绘图(x、y、颜色)
图canvas.draw()
图,ax=plt子批次(1,1)
ax.set_xlabel('X')
ax.set_ylabel('Y'))
ax.set_xlim(0,1)
ax.set_ylim(0,1)
对于范围(5)内的f:
pltIn(ax,['b','r'])
时间。睡眠(1)
我正在jupyter lab中寻找一种等效的方法。我尝试使用库将
%matplotlib笔记本
替换为
%matplotlib小部件
,但没有成功:该图仅在循环完成后显示


我不想要的是像in建议的解决方案或清除整个输出的解决方案,因为我可能会打印其他内容,例如tqdm进度条这是一个众所周知的matplotlib,有解决方法。 有关问题包括:及 最长的解释可能是

这两种变通方法都将与ipympl一起使用

解决方法1 按照以下答案使用异步ipython事件循环:

解决方法2 将
plt.子图
和更新的绘图代码拆分为两个单元格。如果在执行单元格之间等待一两秒钟,则绘图将有足够的时间进行正确设置,并且应该可以正常工作。看起来是这样的:

单元1:

fig,ax=plt.子批次(1,1)
ax.set_xlabel('X')
ax.set_ylabel('Y'))
ax.set_xlim(0,1)
ax.set_ylim(0,1)
等待绘图显示,然后执行: 单元2:

范围(5)内f的
:
pltIn(ax,['b','r'])
时间。睡眠(1)

也许使用
IPython.display.display.update回答这个问题很有帮助: