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

如何在Bokeh中实时更新hex_tile的fill_color及linear_cmap最大值范围

解决方案

核心逻辑是不要重新创建颜色映射或替换fill_color属性,直接修改已绑定的LinearColorMapper的high参数即可:

  1. 初始化阶段提取颜色映射器实例单独存储,方便后续修改
  2. 定时回调中仅更新映射器的最大值参数,无需修改渲染器配置

修正后的可运行代码如下:

from bokeh.models import ColumnDataSource, LinearColorMapper
from bokeh.plotting import figure
from bokeh.io import curdoc

# 初始化数据
data = bin_generate().to_dict(orient='list')
init_max = max(bin_generate().counts)
# 提前抽取出LinearColorMapper实例,后续直接修改这个对象的参数
color_transform = LinearColorMapper(palette='Viridis256', low=0, high=init_max)
fill_color_config = {'field': 'counts', 'transform': color_transform}

source = ColumnDataSource(data=data)
f = figure(x_range=(-5,5),y_range=(0,6), toolbar_location=None, tools="hover",
         match_aspect=True, background_fill_color='#440154')

# 初始化hex_tile时用提前定义好的颜色配置
f.hex_tile(q="q", r="r",size=0.09, line_color=None, source=source,  
           fill_color=fill_color_config)

def update():
    new_data = bin_generate().to_dict(orient='list')
    source.stream(new_data, rollover=50)
    # 直接修改颜色映射器的high参数即可,不需要重新赋值fill_color
    color_transform.high = max(bin_generate().counts)

curdoc().add_root(f)
curdoc().add_periodic_callback(update, 100)

补充说明:

  • linear_cmap本质是快速生成{field: 字段名, transform: LinearColorMapper实例}的语法糖,你需要操作的是里面的transform对应的映射器实例
  • Bokeh会自动监听LinearColorMapper的参数变化,只要修改high属性,页面的颜色映射会自动同步更新,不需要额外调用渲染刷新方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:24:02