Я создаю интерактивную карту мира с Bokeh (сервер Bokeh).Страны представлены патчами.Страны должны быть выбраны с помощью Taptool.Тем не менее, некоторые страны состоят из нескольких патчей.При нажатии на один патч страны, вся страна, то есть все соответствующие патчи должны появиться как выбранные.Я могу решить это с помощью следующего кода.Тем не менее, между выбранным патчем, на который я нажимаю, и другими патчами, принадлежащими этой стране, существует заметная временная задержка.Поэтому мне интересно, есть ли более эффективный / простой способ добиться этого?
from bokeh.models import ColumnDataSource, Patches
from bokeh.plotting import figure
from bokeh.layouts import row
from bokeh.io import curdoc
import pandas as pd
from bokeh.models.selections import Selection
x = [[5,2,4], [3,5,6], [6,9,7], [8,7,6]]
y = [[5,3,2], [6,5,8], [3,1,6], [1,2,1]]
country = ['A', 'A', 'B', 'B']
id = [0,1,2,3]
df = pd.DataFrame(data=dict(x=x, y=y, country=country, id=id))
source = ColumnDataSource(df)
p = figure(tools="tap")
renderer = p.patches('x', 'y', source=source)
def my_tap_handler(attr,old,new):
indices = source.selected.indices
country_name = source.data['country'][indices[0]]
country_indices = df['id'][df['country'] == country_name]
if len(source.selected.indices) == 1:
new_indices = list(country_indices)
source.selected = Selection(indices=new_indices)
renderer.data_source.on_change("selected", my_tap_handler)
curdoc().add_root(row(p, width=800))
Запуск в терминале: bokeh serve filename.py --show