Python 使用taptool更新bokeh绘图中的颜色映射器
我需要根据用户可以选择的变量更改多边形的颜色贴图。我可以更新颜色,但如果使用TapTool选择一个多边形,则会显示初始颜色贴图:Python 使用taptool更新bokeh绘图中的颜色映射器,python,bokeh,Python,Bokeh,我需要根据用户可以选择的变量更改多边形的颜色贴图。我可以更新颜色,但如果使用TapTool选择一个多边形,则会显示初始颜色贴图: from bokeh.plotting import figure, curdoc from bokeh.layouts import column, layout from bokeh.models import ColumnDataSource, LinearColorMapper, ColorBar, BasicTicker, Select from bokeh
from bokeh.plotting import figure, curdoc
from bokeh.layouts import column, layout
from bokeh.models import ColumnDataSource, LinearColorMapper, ColorBar, BasicTicker, Select
from bokeh.palettes import Viridis256 as palette
palette.reverse()
TOOLS = "tap"
p = figure(title="Coloring Humidity", tools=TOOLS)
source = ColumnDataSource(dict(x=[[1, 3, 2], [3, 4, 6, 6]],
y=[[2, 1, 4], [4, 7, 8, 5]],
name=['A', 'B'],
humidity=[0, 1.0],
temperature=[10.0, 0.0]
)
)
color_mapper = LinearColorMapper(palette=palette, low=0, high=1)
pglyph = p.patches('x', 'y', source=source, fill_color={'field': 'humidity', 'transform': color_mapper},
alpha=1, line_width=2)
color_bar = ColorBar(color_mapper=color_mapper, label_standoff=12, border_line_color=None, location=(0, 0),
ticker=BasicTicker())
p.add_layout(color_bar, 'left')
def color_change(attr, old, new):
cm = p.select_one(LinearColorMapper)
if new == 'humidity':
cm.update(low=0, high=1.0)
elif new == 'temperature':
cm.update(low=0, high=10)
else:
raise ValueError('unknown color')
pglyph.glyph.fill_color['field'] = new
p.title.text = 'Coloring {}'.format(new.title())
select = Select(value='humidity', options=['humidity', 'temperature'])
select.on_change('value', color_change)
l = layout([
[select],
[p]
])
curdoc().add_root(l)
在这个脚本中,如果我在“选择”小部件中选择“温度”,颜色将毫无问题地重新映射,但如果我随后使用taptool选择一个多边形,则选定和未选定多边形的颜色将返回湿度的颜色映射。我想我遗漏了什么,但我不知道是什么。我想你只需要删除这行:
pglyph.glyph.fill_color['field']=new
更改回调中ColorMapper的低/高属性会导致数据重新进行颜色映射,因此您不必手动设置颜色。我需要更改用于着色的变量,将多边形视为具有“温度”、“湿度”等变量的多边形,用户必须能够选择要着色的功能。我将把这个问题编辑成一个更具体的例子