Bokeh Выберите виджет для обновления графика

Я пытаюсь построить график сетки, который обновляется в зависимости от значения, выбранного из виджета «Выбрать» с помощью боке. График работает, но между виджетом и графиком нет взаимодействия. Я не знаю, как это сделать. Цель состоит в том, чтобы использовать «Выбрать» для обновления dfPlot, а затем выполнить оставшиеся шаги.

Вот что у меня есть на данный момент:

output_file('layout.html')

select = Select(title="Option:", options= list(dfExpense['Ident'].unique()), value= "VALUE")

def update_plot(attr, old, new):
    dfPlot = dfExpense[dfExpense['Ident'] == select.value]

select.on_change('value', update_plot)

d = []

for x in dfPlot['Account'].unique():
    d.append(f's_{x}')

plt = []

for i, x in enumerate(dfPlot['Account'].unique()):
    dftemp = dfPlot[dfPlot['Account']==gl]
    source1 = ColumnDataSource(dftemp)
    d[i] = figure(plot_width = 250, plot_height = 250)
    d[i].circle('X', 'Amount', source = source1)
    plt.append(d[i])
    
grid= gridplot([i for i in plt], ncols = 6)
l = row(grid, select)
show(l)

curdoc().add_root(l)

Спасибо!


person Reison    schedule 06.08.2020    source источник


Ответы (1)


Кто-то другой, вероятно, даст вам лучший ответ. Я просто скажу, что я думаю, что вы делаете что-то совершенно не то, что пытаетесь сделать (я сделал то же самое, когда начал работать с боке).

После небольшого опыта работы с боке, я понял, что касается вашей проблемы, следующим образом:

  • Использование curdoc для создания графика Bokeh на основе интерактивного виджета означает, что вы используете Python для взаимодействия с графиком, а это означает, что вы должны использовать сервер Bokeh, а не просто использовать файл .html. (как следствие, вы не будете использовать show или output file) https://docs.bokeh.org/en/latest/docs/user_guide/server.html
  • Вы по-прежнему можете создать автономный файл .html и добавить в него интерактивные виджеты, такие как ползунки, но вам придется написать некоторый Javascript. Скорее всего, вы захотите сделать это, используя CustomJS в боке, что делает это относительно легко. https://docs.bokeh.org/en/latest/docs/user_guide/interaction/callbacks.html

У меня была аналогичная проблема, я хотел интерактивности без использования сервера Python Bokeh. CustomJS в конечном итоге удовлетворил мои потребности, и хотя я новичок в Javascript, они делают это довольно легко (ну, особенно, если ваша проблема похожа на примеры, в противном случае это может быть сложно, но все же не очень сложно).

person TheDrDOS    schedule 07.08.2020