Сервер Bokeh - изменение цвета глифа при выборе с помощью инструмента Tap - PullRequest
0 голосов
/ 04 мая 2020

Я хочу использовать TapTool с сервером Bokeh для выполнения обратного вызова с некоторыми дополнительными функциями.

Глифы, которые я хочу выбрать, находятся поверх фонового изображения.

Если я выберу глиф с помощью TapTool, глиф сохранит непрозрачность, но все остальные глифы уменьшатся в прозрачности. Проблема в том, что эти глифы плохо видны на фоновом изображении, когда они становятся более непрозрачными.

Есть ли способ оставить все альфа-значения глифов на 100% и вместо этого изменить цвет выбранные глифы?

Вот пример кода, который я нашел здесь

from bokeh import plotting as bplt
from bokeh import layouts as blayouts
from bokeh import models as bmodels
from bokeh import io as bio

fig = bplt.figure(tools="tap")

source = bmodels.ColumnDataSource(dict(x=[0,1], y=[0,1]))

r = fig.circle('x', 'y', source=source, size=10)

def handler(attr, old, new):
    print('attr: {} old: {} new: {}'.format(attr, old, new))

# r.data_source.on_change('selected', handler)
r.data_source.selected.on_change('indices', handler)

bio.curdoc().add_root(blayouts.layout([[fig]]))

1 Ответ

0 голосов
/ 04 мая 2020

Вот рабочий пример для боке 2.0.1:

from bokeh import plotting as bplt
from bokeh import layouts as blayouts
from bokeh import models as bmodels
from bokeh import io as bio

fig = bplt.figure(tools="tap")

source = bmodels.ColumnDataSource(dict(x=[0,1], y=[0,1]))

r = fig.circle('x', 'y', source=source, size=10, color='#000000',
        # set visual properties for selected glyphs
                    selection_color="#2bff00",

                    # set visual properties for non-selected glyphs
                    nonselection_fill_alpha=1.0,
                    nonselection_fill_color="#000000")

def handler(attr, old, new):
    print('attr: {} old: {} new: {}'.format(attr, old, new))

# r.data_source.on_change('selected', handler)
r.data_source.selected.on_change('indices', handler)

bio.curdoc().add_root(blayouts.layout([[fig]]))
...