Bokeh Выберите виджет для обновления графика - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь построить график сетки, который обновляется в зависимости от значения, выбранного в виджете «Выбрать» с помощью боке. График работает, но между виджетом и графиком нет взаимодействия. Я не знаю, как это сделать. Цель состоит в том, чтобы использовать «Выбрать» для обновления 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)

Спасибо!

1 Ответ

0 голосов
/ 07 августа 2020

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

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

  • Использование curdoc для создания графика Боке на основе интерактивного виджета означает, что вы используете 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, они делают это довольно легко (ну, особенно если ваша проблема похожа на примеры, в противном случае это может быть сложно, но все же не очень сложно).

...