Боке сюжетный сюжет не меняется с помощью ползунка - PullRequest
0 голосов
/ 21 февраля 2019

Хотел бы создать боке-хороплет для собственного использования.Это показывает, что Китай разделен на многоугольники Provinces, окрашенные в значение, называемое surplus.У меня Years с 1995 по 2016 год, и я пытаюсь обновить цвета вместе со слайдером.Мой фрейм данных выглядит примерно так (случайная выборка из 10):

     Year   Province       Surplus
371  2014      Hubei  5.953000e+06
268  1999     Fujian  7.123000e+06
44   1995      Hebei  9.030000e+05
246  1999      Anhui  1.300600e+07
236  2011   Zhejiang -5.258105e+06
406  2005  Guangdong  1.117000e+07
180  1999   Shanghai  1.543000e+06
252  2005      Anhui  1.250800e+07
346  2011      Henan -1.538884e+05
399  1998  Guangdong  1.614100e+07

Мой код таков:

source = ColumnDataSource(data = df_all)

color_mapper = LinearColorMapper(palette = Spectral6, 
                                 low = df_all.Surplus.min(),
                                 high = df_all.Surplus.max())

p = figure(title = 'Statistics by Year',
           plot_height = 700,
           plot_width = 1100)

p.patches('x', 'y', 
          source = source, 
          fill_color = {'field': 'Surplus', 
                        'transform': color_mapper},
          line_color = 'black',
          line_width = 0.60,    
          fill_alpha = 0.60)

def callback(attr, old, new):
    yr = slider.value
    new_data = df_all[df_all.Year == yr]
    source.data = new_data

slider = Slider(start = 1995, 
                end = 2016, 
                value = 1995, step = 1, 
                title = "Year")
slider.on_change('value', callback)

hover = HoverTool(tooltips = [('Province','@Province'), ('Surplus', '@Surplus')])

color_bar = ColorBar(color_mapper = color_mapper, width=8,  location=(0,0))
layout = column(widgetbox(slider), p)
curdoc().add_root(layout)

outfp = r"C:\Users\myname\surplus2016.html"
save(p, outfp)

Однако мои ползунки не меняются, и японятия не имею, почему еще.Возможно, что-то с моим шагом обновления.Есть идеи?Хотя мне удалось вытащить хороплета.

1 Ответ

0 голосов
/ 21 февраля 2019

Когда вы запускаете код как «обычный» скрипт Python с show, вы создаете автономный вывод HTML, который существует только в браузере, без связи с каким-либо процессом Python.В этой ситуации невозможно запустить реальные обратные вызовы Python, потому что браузер вообще ничего не знает о Python.Для запуска реального кода Python в обратных вызовах, т. Е. С on_change требуется запустить код как серверное приложение Bokeh :

  • заменить вызов show на curdoc().add_root(p) и
  • запустить код с помощью bokeh serve --show <filename>
...