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

Python Bokeh添加ColorBar报错:预期ColorMapper实例却获dict

Bokeh图表添加ColorBar报错问题解决

问题场景

编写Python Bokeh代码时,图表可正常生成,但添加ColorBar时报错,代码片段如下:

from bokeh.palettes import Turbo256
from bokeh.models import LinearAxis, Range1d, Label, LabelSet, ColumnDataSource, LinearColorMapper, ColorBar

x = Combined_Data_Air[X1]
y = Combined_Data_Air[Y1a]
z = Combined_Data_Air['xxxxxxx']

# X1 and Y1a are Pandas column names.

source = ColumnDataSource(data = dict( x = x,y=y,z = z))
cmap = linear_cmap(field_name='z', palette="Turbo256",low = 0, high = 30)
s1.circle(x= 'x', y ='y', source=source,color=cmap, legend_label=Y1a,size=2)


color_bar = ColorBar(color_mapper=cmap,location = 'right')

错误信息

执行最后一行代码时触发如下错误:

ValueError: failed to validate ColorBar(id='1074', ...).color_mapper: expected an instance of type ColorMapper, got {'field': 'z', 'transform': LinearColorMapper(id='1054', ...)} of type dict

问题原因

linear_cmap()函数返回的是一个字典(包含field和transform字段),而ColorBar的color_mapper参数要求传入ColorMapper类的实例(比如LinearColorMapper),类型不匹配导致报错。

解决方案

方案1:单独创建ColorMapper实例

先定义LinearColorMapper实例,再分别用于图形上色和ColorBar配置:

from bokeh.palettes import Turbo256
from bokeh.models import LinearAxis, Range1d, Label, LabelSet, ColumnDataSource, LinearColorMapper, ColorBar
from bokeh.transform import linear_cmap  # 确保导入该函数

x = Combined_Data_Air[X1]
y = Combined_Data_Air[Y1a]
z = Combined_Data_Air['xxxxxxx']

source = ColumnDataSource(data = dict( x = x,y=y,z = z))

# 1. 创建独立的LinearColorMapper实例
color_mapper = LinearColorMapper(palette="Turbo256", low=0, high=30)

# 2. 用linear_cmap绑定字段与颜色映射
cmap = linear_cmap(field_name='z', color_mapper=color_mapper, low=0, high=30)
s1.circle(x='x', y='y', source=source, color=cmap, legend_label=Y1a, size=2)

# 3. 将ColorMapper实例传给ColorBar,并添加到图表
color_bar = ColorBar(color_mapper=color_mapper, location='right')
s1.add_layout(color_bar)

方案2:从linear_cmap返回值中提取ColorMapper

直接从linear_cmap生成的字典里取出transform字段对应的实例:

cmap = linear_cmap(field_name='z', palette="Turbo256", low=0, high=30)
# 提取字典中的transform属性(即LinearColorMapper实例)
color_bar = ColorBar(color_mapper=cmap['transform'], location='right')
# 务必将ColorBar添加到图表布局
s1.add_layout(color_bar)

关键说明

  • linear_cmap是便捷工具函数,生成的是图形颜色配置字典,其中transform才是真正的ColorMapper实例。
  • ColorBar必须接收ColorMapper类实例作为color_mapper参数,不能直接传入linear_cmap的返回值。
  • 必须调用add_layout()将ColorBar添加到图表中,否则不会显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 18:25:16