Обновите интерактивный график на боке с помощью раскрывающегося списка и обратного вызова - PullRequest
0 голосов
/ 07 мая 2020

Я новичок в Python, но прошел обучение DataCamp. Я надеюсь обновить график с помощью раскрывающегося меню.

Выпадающее меню выберет столбец из фрейма данных и нанесет эти данные на ось x.

Это то, что у меня есть пока:


df1 = pd.read_csv('C:/PStuff/dataA.txt')
source = ColumnDataSource(df1)

plot = figure()
plot.circle(x = 'col1', y = 'col5', source=source)

menu = Select(options=['col1', 'col2', 'col3'], value='col1', title='Distribution')

def callback(attr, old, new):
    if menu.value == 'col2':  x ='col2'
    elif menu.value == 'col3': x ='col3'
    else:                       x ='col1'
menu.on_change('value', callback)

layout = column(menu, plot)
curdoc().add_root(layout)

В настоящее время я не получаю никаких ошибок при его запуске или запуске службы Bokeh, на данный момент просто ничего не отображается! Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 07 мая 2020

x из аргументов plot.circle () существует только внутри этого вызова. Таким образом, ваш обратный вызов просто присваивает значение переменной x, которая ничего не делает.

Вы можете обновить сам источник.

# set the source to specific columns from df1 initially
source = ColumnDataSoruce(data={'x':df1['col1'],'y':df1['col5']}) 
plot.circle(x = 'x', y = 'y', source=source)
menu = Select(options=['col1', 'col2', 'col3'], value='col1', title='Distribution')
def callback(attr, old, new):
   source.data.update({'x':df1[new]})
...