0
我需要根據用戶可以選擇的變量更改多邊形的顏色映射。我可以更新顏色,但如果我選擇用TapTool一個多邊形然後出現初始彩色地圖:使用taptool更新散景圖中的顏色映射器
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選擇其中一個多邊形,則所選和未選多邊形的顏色將返回到溼度的顏色映射。我想我失去了一些東西,但我不知道是什麼。
我需要更改用於着色的變量,將變量看作「溫度」,「溼度」等多邊形,用戶必須能夠選擇要着色的特徵。我將把這個問題編輯成一個更具體的例子 –