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

如何在Jupyter Notebook中更新Bokeh单个圆形样式而无需重绘全部?

如何在Bokeh中无需重绘整个图表更新单个图形样式?

你当前在Jupyter Notebook中用以下代码绘制3个圆形:

fig = figure(plot_width = 300, plot_height = 300)
fig.circle(x = [1, 2, 3], y = [3, 7, 5], size = 20, color ="green", alpha = 0.6)
show(fig)

修改单个圆形颜色时,你选择重新绘制该圆形并调用show(fig):

fig.circle(x = 2, y = 7, size = 20, color ="blue", alpha = 0.6)
show(fig)

但面对大量图形时,这种方式效率很低。可以通过Bokeh的ColumnDataSource实现局部更新,无需重绘整个图表:

解决方案:使用ColumnDataSource管理数据

Bokeh的ColumnDataSource是统一管理图表数据的核心组件,修改数据源后图表会自动同步更新,无需再次调用show()。

具体实现步骤

  1. 创建ColumnDataSource,将所有圆形的x、y坐标、颜色、大小等参数存入其中
  2. 调用fig.circle()时绑定该数据源
  3. 修改单个图形样式时,直接更新数据源对应位置的数值,触发数据源变化通知即可

示例代码:

from bokeh.plotting import figure, show, ColumnDataSource
from bokeh.io import output_notebook

# 初始化Notebook的Bokeh渲染环境
output_notebook()

# 构建包含所有圆形参数的数据源
source = ColumnDataSource(data={
    'x': [1, 2, 3],
    'y': [3, 7, 5],
    'size': [20, 20, 20],
    'color': ['green', 'green', 'green'],
    'alpha': [0.6, 0.6, 0.6]
})

fig = figure(plot_width=300, plot_height=300)
# 绑定数据源绘制圆形
fig.circle(x='x', y='y', size='size', color='color', alpha='alpha', source=source)

# 首次渲染图表
show(fig)

# 修改第二个圆形(索引为1)的颜色
source.data['color'][1] = 'blue'
# 触发数据源变化通知,图表会自动刷新
source.change.emit()

额外说明

  • 如果是直接替换整个数据列(比如source.data['color'] = ['green', 'blue', 'green']),无需调用source.change.emit(),Bokeh会自动检测到数据变化
  • 除了颜色,x/y坐标、大小、透明度等所有绑定到数据源的属性,都可以用这种方式局部更新
  • 在Jupyter Notebook中,只要图表已通过show()渲染,更新数据源后图表会实时刷新,无需重复调用show()

内容的提问来源于stack exchange,提问作者olivier dadoun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:01:16