我制作了一个带有bokeh的交互式十字形图,并且我试图使用下拉小部件(选择)添加活动的交互。但是,大多数教程和有关活动交互的SO问题都使用ColumnDataSource,而不是GeoJSONDataSource。
问题在于,GeoJSONDataSource不像ColumnDataSource那样具有.data方法,因此idk确切说明了更新语法时的工作方式。
我的数据集是city_dict = {'Amsterdam': <some data frame>, 'Antwerp': <some data frame>, ...}
形式的字典,其中数据框为geojson格式。我已经确认制作字形时可以使用这种格式。
def update(attr, old, new):
s_value = dropdown.value
p.title.text = '%s', s_value
new_src1 = make_dataset(s_value)
val1 = GeoJSONDataSource(new_src1)
r1.data_source = val1
其中make_dataset
是将原始数据集转换为可输入GeoJSONDataSource函数的数据集的函数。 make_dataset
需要一个字符串(城市名称)才能工作,例如。 “阿姆斯特丹”。它适用于被动交互。
主要情节代码(已删除的不必要内容)为:
dropdown = Select(value='Amsterdam', options = cities)
controls = WidgetBox(dropdown)
initial_city = 'Amsterdam'
a = make_dataset(initial_city)
src1 = GeoJSONDataSource(a)
p = figure(title = 'Amsterdam', plot_height = 750 , plot_width = 900, toolbar_location = 'right')
r1 = p.patches('xs','ys', source = src1, fill_color = {'field' :'norm', 'transform' : color_mapper})
dropdown.on_change('value', update)
layout = row(controls, p)
curdoc().add_root(layout)
我添加了我得到的错误。 error handling message Message 'PATCH-DOC' (revision 1) content: {'events': [{'kind': 'ModelChanged', 'model': {'type': 'Select', 'id': '1147'}, 'attr': 'value', 'new': 'Antwerp'}], 'references': []}: ValueError("expected a value of type str, got ('%s', 'Antwerp') of type tuple",)