Обновление данных в Bokeh - PullRequest
       7

Обновление данных в Bokeh

0 голосов
/ 26 ноября 2018

Я новичок в Bokeh и не знаю, как получить данные моего графика и как их обновить.Мой код соответствует следующим инструкциям: https://github.com/WillKoehrsen/Bokeh-Python-Visualization/blob/master/interactive/exploration/interactive_development.ipynb

Но, к сожалению, метод обновления не работает для меня.Я пытался найти документацию, касающуюся этого метода, но не смог найти ни одного.кто-нибудь может помочь?в основном я сгенерировал pandas dataframe из своих данных и преобразовал его в ColumnDataSource.Теперь я хочу добавить или вычесть данные из него, но новый ColumnDataSource не обновляет старый.

Любая помощь будет наиболее ценной!Это мой код на данный момент, он все равно не будет корректно обновляться:

def update(attr, old, new):
    stations_to_plot = [int(station_selection.labels[i]) for i in station_selection.active]
    by_station = pd.DataFrame(data=no_bikes.loc[stations_to_plot,:'23 PM'].values,index=list(map(str,initial_stations))
                          ,columns=no_bikes.loc[:,:'23 PM'].columns.tolist())
    new_src = ColumnDataSource(by_station.T)
    r.data_source.data.update(new_src.data)


stations=list(map(str,no_bikes.loc[:,'station_avg'].nlargest(10).index.tolist()))
station_selection = CheckboxGroup(labels=stations, active = [0,1,3])
station_selection.on_change('active', update)

initial_stations = [int(station_selection.labels[i]) for i in station_selection.active]   
range_select = RangeSlider(start = 0, end = 23, value = (0, 23),step = 1, title = 'Hours to plot')
range_select.on_change('value', update)

by_station = pd.DataFrame(data=no_bikes.loc[initial_stations,:'23 PM'].values,index=list(map(str,initial_stations))
                          ,columns=no_bikes.loc[:,:'23 PM'].columns.tolist())

src = ColumnDataSource(by_station.T)

p = figure(plot_width = 500, plot_height = 500, title = 'Chances not to find bikes',
                       x_axis_label = 'Hour of the day', y_axis_label = 'Proportion',x_range=src.data['index'])

for i,station in enumerate(src.data.keys()):
    if station in list(map(str, initial_stations)):
        r=p.line(x='index',y=station,source =src, legend='Station N.'+station, color=Category20_16[i], line_width=5)




controls = WidgetBox(station_selection,range_select)
layout = row(controls, p)
curdoc().add_root(layout)
...