Я сделал интерактивную карту хороплета с боке, и я пытаюсь добавить активные взаимодействия, используя выпадающий виджет (Выбрать). Однако в большинстве уроков и SO вопросов об активных взаимодействиях используется ColumnDataSource, а не GeoJSONDataSource.
Проблема заключается в том, что у GeoJSONDataSource нет метода .data, как у ColumnDataSource, поэтому вам нужно точно знать, как работает синтаксис при его обновлении.
Мой набор данных - это словарь в форме city_dict = {'Amsterdam': <some data frame>, 'Antwerp': <some data frame>, ...}
, где фрейм данных представлен в формате геойсон. Я уже подтвердил, что этот формат работает при создании глифов.
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",)