Bokeh-choropleth图不随时间变化

2024-09-23 22:31:04 发布

您现在位置:Python中文网/ 问答频道 /正文

想为我自己创造一个波基合唱团。它显示了中国被多边形分割成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)

但是,我的颜色不会随着滑块移动,我也不知道为什么。可能跟我的更新步骤有关。有什么想法吗?不过,我还是设法把合唱团弄出来了。你知道吗


Tags: sourcedfnewdatavalueplusallwidth
1条回答
网友
1楼 · 发布于 2024-09-23 22:31:04

当您使用show以“常规”python脚本运行代码时,您创建的是一个独立的HTML输出,它只存在于浏览器中,与任何python进程都没有连接。在这种情况下不可能运行真正的Python回调,因为浏览器对Python一无所知。在回调中运行真正的Python代码(即使用on_change)需要将代码作为Bokeh server application运行:

  • curdoc().add_root(p)替换show调用,然后
  • bokeh serve show <filename>运行代码

相关问题 更多 >