首页 > 解决方案 > 散景 on_change 补丁

问题描述

使用 python 3.6 和散景 13.0。我正在结合散景补丁来创建省份地图和散景圈以覆盖城市。

我想将此地图用作另一个绘图的交互式输入过滤器。

当点击城市没问题时,我得到了城市的名字。

当尝试对一个不是单点而是多边形的省份执行相同操作时,我收到以下错误消息:

错误处理消息消息'PATCH-DOC'(修订版1):TypeError('列表索引必须是整数或切片,而不是列表',)

我只想要行的索引/名称。我应该如何处理这个?

with open('map_NL_provinces.pickle', 'rb') as f:
        provinces = pickle.load(f)

with open('map_NL_cities.pickle', 'rb') as f:
    cities = pickle.load(f)

# renaming key in in dict
provinces['name'] = provinces.pop('names')

provinces = ColumnDataSource(data = provinces)

# from df to CDS
cities = ColumnDataSource(data=cities[['name','x','y']])

# plot map
f.patches('x', 'y', source=provinces,
          fill_color={'field': 'rate', 'transform': color_mapper},
          fill_alpha=1, line_color="black", line_width=1.5)

# plot cities
f.circle(x='x', y='y', source=cities, size=12, color=palette[3])

def callback_cities(attr, old, new):
    # This uses syntax for Bokeh >= 0.12.15
    print("Names of selected circles: {}".format(cities.data['name'][cities.selected.indices]))
    print("Indices of selected circles: ", cities.selected.indices)
    f.title.text=str(cities.data['name'][cities.selected.indices])

def callback_provinces(attr, old, new):
    # This uses syntax for Bokeh >= 0.12.15
    print("Names of selected provinces: {}".format(provinces.data['name'][provinces.selected.indices]))
    print("Indices of selected provinces: ", provinces.selected.indices)
    f.title.text=str(provinces.data['name'][provinces.selected.indices])

cities.on_change('selected', callback_cities)
provinces.on_change('selected', callback_provinces)

标签: pythonbokeh

解决方案


好吧,我想多了这个问题。获取补丁中传递的列表的第一个条目为我解决了这个问题。

改变:

provinces.data['name'][provinces.selected.indices]

至:

provinces.data['name'][provinces.selected.indices[0]]

推荐阅读