python - 如何使用 JupyterLab 循环更新交互式图形
问题描述
我正在尝试使用 JupyterLab 在循环中更新交互式 matplotlib 图。如果我在与循环不同的单元格中创建图形,我可以做到这一点,但我更愿意创建图形并在同一个单元格中运行循环。
简单代码示例:
import matplotlib.pyplot as plt
import time
%matplotlib widget
fig = plt.figure()
for i in range(5):
x = list(range(i+2))
xx = [x**2 for x in x]
plt.clf()
plt.plot(x, xx)
fig.canvas.draw()
time.sleep(1)
如果fig = plt.figure()
与循环在同一个单元格中,则图形在循环完成之前不会更新:
如果我在不同的单元格中创建图形,我会得到动态更新,但如果可能的话,我希望能够在同一个单元格中创建图形,因此输出位于循环下方:
我在其他问题(此处、此处和此处)中尝试了几个答案,但是,它们似乎不适用于 JupyterLab 中的交互式图形。我使用jupyter/scipy-notebook docker镜像作为我的环境,所以我相信一切都设置正确。
有没有办法在创建图形的同一单元格中获取动态更新?
解决方案
如果不想使用asyncio
,可以使用display(..., display_id=True)
获取句柄并.update()
在其上使用:
import matplotlib.pyplot as plt
import time
%matplotlib widget
fig = plt.figure()
hfig = display(fig, display_id=True)
def update():
for i in range(5):
print(i)
x = list(range(i + 2))
xx = [x**2 for x in x]
plt.clf()
plt.plot(x, xx)
fig.canvas.draw()
hfig.update(fig)
time.sleep(1)
update()
plt.close(fig)
推荐阅读
- apache-zookeeper - 清理使用 apache curator 创建的锁
- pandas - networkx 中最可能的路径
- javascript - 将两个数组合并为一个结果数组
- python - 在数据框数据集中分组 - 每 X 年
- r - 如何从二进制表/矩阵创建表达式输入样式格式?
- android - 在 Android 中使用 LD_PRELOAD
- cmake - CONAN - 编译消费者时出错:无法为不是由该项目构建的目标“MyLib”指定链接库
- javascript - 自定义光标在 Windows 操作系统上像素化
- jquery - jquery 函数仅在单击的元素的父级上运行
- nginx - Nginx 使用哪个日志对象 - ngx_cycle->log vs event->log?