You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSCode中Jupyter Notebook如何更新Bokeh绘图(无需清输出重绘)

在VSCode的Jupyter Notebook中实现Bokeh绘图动态更新

Bokeh的push_notebook功能在VSCode的Jupyter Notebook中完全支持,你的代码无法更新是因为缺少关键配置和代码逻辑调整,以下是解决步骤:

1. 确保Jupyter Widgets环境正常

VSCode需要允许Bokeh的脚本源加载:

  • 打开VSCode设置,搜索jupyter.widgetScriptSources,将https://cdn.bokeh.org添加到允许列表中
  • 或者在Notebook会话中运行以下代码确保环境初始化:
    from bokeh.io import curdoc
    curdoc().theme = 'caliber'  # 初始化文档环境,确保交互功能正常
    

2. 调整数据更新逻辑

直接赋值data_source.data不会自动触发Bokeh的更新检测,推荐使用以下两种方式:

方式一:使用stream逐步添加数据(适合增量更新)

修改循环内的代码为:

line.data_source.stream({'x': [i], 'y': [i**2]})
push_notebook(handle=handle)

方式二:替换全部数据并手动触发变更

如果需要替换完整数据集,在赋值后手动触发变更事件:

x_data = [j for j in range(i + 1)]
y_data = [j**2 for j in range(i + 1)]
line.data_source.data = {'x': x_data, 'y': y_data}
line.data_source.change.emit()  # 通知Bokeh数据源已更新
push_notebook(handle=handle)

3. 完整可运行代码

from bokeh.plotting import figure, output_notebook, show
from bokeh.io import push_notebook
from time import sleep

# 启用Notebook内联绘图
output_notebook()

# 创建绘图对象
plot = figure(title='Update Example', x_axis_label='Time', y_axis_label='Value')
line = plot.line([], [])
handle = show(plot, notebook_handle=True)

# 模拟动态更新流程
for i in range(10):
    # 增量添加数据并更新
    line.data_source.stream({'x': [i], 'y': [i**2]})
    push_notebook(handle=handle)
    sleep(0.5)

4. 版本兼容性检查

你的bokeh-3.0.3和jupyter_bokeh-3.0.7版本组合是兼容的,建议同时确保VSCode的Jupyter插件为最新版本,避免环境适配问题。

内容的提问来源于stack exchange,提问作者Carlos Pinzón

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 19:03:12