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

Bokeh 2.3.0 如何直接获取LinearColorMapper指定值对应的颜色码

方案说明

Bokeh的LinearColorMapper定位是面向前端渲染的序列化组件,本身没有在Python端暴露直接取值的API,但其内部的颜色映射规则是完全确定、可以在Python端直接复现的,不需要额外依赖,只需要按照和Bokeh前端一致的计算逻辑写一个取值函数即可,计算结果和前端实际渲染的颜色100%匹配。

可直接复用的取值函数

def get_mapped_color(color_mapper, input_value):
    # 读取mapper上已配置的所有参数
    palette = color_mapper.palette
    low = color_mapper.low
    high = color_mapper.high
    palette_total = len(palette)

    # 越界值截断处理,和Bokeh原生逻辑完全一致
    clamped_val = max(low, min(high, input_value))
    # 计算归一化比例
    ratio = (clamped_val - low) / (high - low)
    # 映射到调色板的整数索引
    color_idx = round(ratio * (palette_total - 1))
    # 索引边界兜底
    color_idx = max(0, min(palette_total - 1, color_idx))

    return palette[color_idx]

替换原有调用逻辑

把你示例中无法运行的遍历代码替换成下面的内容,就能拿到每个类别对应的颜色码:

for idx, category_name in enumerate(possible_categories):
    mapped_color = get_mapped_color(cmap, idx)
    print(f"Color of Category {category_name}: {mapped_color}")

适配自定义配置的补充说明

  • 如果你的LinearColorMapper配置了low_color、high_color、nan_color特殊属性,只需要在函数开头加上判断:当输入值低于low时直接返回low_color、高于high时直接返回high_color、为非数值时返回nan_color,即可完全对齐前端行为
  • 初始化使用内置字符串调色板(比如示例的Turbo256)时,cmap.palette会自动解析为十六进制颜色值组成的数组,不需要手动导入调色板资源
  • 针对你示例中的离散类别映射场景(0-3对应4个分类,mapper的low=0、high=4),计算得到的颜色和绘图中实际渲染的点颜色完全一致,不会出现偏移

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 14:54:08