Мне показалось, что я нашел конкретный пример того, как я могу использовать здесь , но, к сожалению, та же логика не работает для меня.
У меня два вопроса:
То, что я пытаюсь сделать, даже возможно: отправить динамический график рассеяния в html-документе, который позволяет вам контролировать то, что наносится на оси x & y.Я преуспел со статическими графиками, но еще не взломал динамические графики.
Где мой код работает неправильно (см. Ниже?)
Вот соответствующие фрагменты кода (по порядку. У меня есть фрейм данных, который я преобразовал в «источник» с помощью ColumnDataSource.
Я создаю начальный график (обратите внимание, на данный момент нетстолбцы с именами «x» и «y». Я создаю их в функции обратного вызова позже):
plot.circle('x', 'y',
source=source,
color={'field': 'Picker',
'transform': mapper},
legend='Picker')
Я создаю два раскрывающихся меню (обратите внимание, что параметры в каждом соответствуют столбцам из «источника» Iхотел бы, чтобы люди могли выбирать)
x_menu=Select(options=['Box Office', 'Difference', 'Price Paid'],
value='Box Office',
title='What do you want to put on the x axis')
y_menu=Select(options=['Metacritic', 'Rotten Tomatoes'],
value='Metacritic',
title='What do you want to put on the y axis')
Я создаю обратный вызов:
callback = CustomJS (args=dict(source=source), code="""
console.log('changed selected option', cb_obj.value)
var data=source.data
data['x']=data[cb_obj.value]
data['y']=data[cb_obj.value]
source.change.emit();
""")
Я назначаю обратные вызовы для выпадающих меню:
x_menu.callback = callback
y_menu.callback = callback
А потом я пытаюсь показать сюжет:
show(row(widgetbox(x_menu, y_menu), plot))
Но он возвращает ошибку ниже:
ERROR:bokeh.core.validation.check:E-1001 (BAD_COLUMN_NAME): Glyph refers to nonexistent column name: x, y [renderer: GlyphRenderer(id='df96b108-e2e4-4b8c-b0c6-12df40b4205d', ...)]
Любая помощь очень ценится. Спасибо!