Update_plot fun c не вызывается при on_change - боке с python интерактивным графиком - PullRequest
0 голосов
/ 26 марта 2020

Проблема - функция update_plot не вызывается. У меня есть сомнения, что slider.on_change как-то не работает.

slider = Slider (title = 'Year', start = 2007, end = 2014, step = 1, value = 2014) slider.on_change ('value', update_plot)

1: У меня есть сервер настройки с - 'bokeh serve --show bokeh_app' - и приложение запускается впервые. Но при смене слайдера ничего не происходит. 2: это может быть проблема с настройками браузера? - Я использую Chrome 3: есть ли способ узнать, происходит ли что-либо вообще при смене слайдера? 4: Как сервер распознает, что событие on_change (в данном случае движение ползунка) действительно произошло? задавать много вопросов, но по существу нужна помощь для отладки триггерного события полный набор кода - main.py, каталог данных и скриптов вместе с соответствующими элементами находится во вложении

#extract from main.py
#data processed for two data frames passed in below function
tab1 = jo_distribution(jo_data_unique, map_gdf) 
# Put all the tabs into one application
tabs = Tabs(tabs = [tab1])
# Put the tabs in the current document for display
curdoc().add_root(tabs)
#extract from function call jo_distribution
def jo_distribution(jo_data_unique, map_gdf):
    def json_data(selectedYear):
        yr = selectedYear
        jo_data_unique_yr = jo_data_unique[jo_data_unique['year'] == yr]
        jo_by_state_yr = jo_data_unique_yr.groupby(['stateProvince','stateProvince_ID']).count()[['gbifID']].reset_index()

        #Merge data with geodata
        merged_gdf_data = map_gdf.merge(jo_by_state_yr, left_on = 'NAME_1', right_on = 'stateProvince', how = 'left')
        merged_gdf_data['gbifID'].fillna('No data', inplace = True)

        merged_json = json.loads(merged_gdf_data.to_json())
        json_data = json.dumps(merged_json)
        return json_data

    #Input GeoJSON source that contains features for plotting.
    geosource = GeoJSONDataSource(geojson = json_data(2014))

    #Define a sequential multi-hue color palette.
    palette = brewer['YlGnBu'][8]
    #Reverse color order so that dark blue is highest obesity.
    palette = palette[::-1]

    color_mapper = LinearColorMapper(palette = palette, low = 0, high = 200, nan_color = '#d9d9d9')

    #Create color bar. 
    color_bar = ColorBar(color_mapper=color_mapper, label_standoff=8,width = 500, height = 20,
    border_line_color=None,location = (0,0), orientation = 'horizontal')

    #Create figure object.
    p = figure(title = 'Jungle owl count in India', plot_height = 800 , plot_width = 800, toolbar_location = None)
    p.xgrid.grid_line_color = None
    p.ygrid.grid_line_color = None
    #Add patch renderer to figure. 
    p.patches('xs','ys', source = geosource,fill_color = {'field' : 'gbifID','transform' : color_mapper},
              line_color = 'black', line_width = 0.25, fill_alpha = 1)

    #Specify figure layout.
    p.add_layout(color_bar, 'below')

    # Define the callback function: update_plot
    def update_plot(attr, old, new):
        yr = slider.value
        print('within update_plot',yr)
        new_data = json_data(yr)
        geosource.geojson = new_data
        p.title.text = 'Jungle Owl count in India for year, %d' %yr

    # Make a slider object: slider 
    slider = Slider(title = 'Year',start = 2007, end = 2014, step = 1, value = 2014)
    slider.on_change('value', update_plot)
    # Make a column layout of widgetbox(slider) and plot, and add it to the current document
    layout = column(p,widgetbox(slider))
    tab = Panel(child = layout, title = 'JO_map')

    return tab

оператор print в функции update_plot ничего не печатает при смене слайдера.

...