散景 - 在交互式地图中选择国家

时间:2018-06-01 08:10:43

标签: python bokeh

我正在使用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

0 个答案:

没有答案