【问题标题】:CheckboxGroup, bokeh, stacked bar chartCheckboxGroup、散景、堆积条形图
【发布时间】:2020-07-29 09:11:07
【问题描述】:

我用悬停工具在散景中制作了堆积条形图,现在还想在绘图中添加CheckboxGroup。然而,我对 Bokeh 很陌生,所以我有点挣扎。我特别不确定如何制作更新功能,我试图启动它但根本不明白它需要做什么:

    trees_to_plot = [tree_selection.labels[i] for i in 
                        tree_selection.active]
    temp = make_dataset(trees_to_plot,
                           bin_width = 40)
    # \TODO: add more code here!

图表本身的代码如下所示:

p = figure(x_range = districtName,plot_width = 900, plot_height=400, 
           title='Tree pr. district',toolbar_location= None)
# Stacked bar chart
renderers = p.vbar_stack(stackers=treeName,x='bydelsnavn',source=temp,
            width=0.5, color = colornames)

# Add the hover tool
for r in renderers:
    tree = r.name
    hover = HoverTool(tooltips=[
        ("%s" % tree, "@{%s}" % tree)
    ], renderers = [r])
    p.add_tools(hover)

p.xaxis.axis_label = 'Copenhagen city cistricts'
p.yaxis.axis_label = 'Tree counts'

# Creat the checkbox selection element
tree_selection = CheckboxGroup(labels=treeName, active = [0,1])
# Link the checkboxes to the information on the graph
tree_selection.on_change('active', update)

# Add to the CheckboxGroup to the figure
controls = WidgetBox(tree_selection)
layout = row(controls,p)
show(layout)

此代码将显示所有带有图表的复选框,但这些复选框和图表本身之间显然没有发生任何交互。有人能指出我正确的方向吗?

提前致谢! :D

【问题讨论】:

    标签: python bokeh stacked-chart user-interaction


    【解决方案1】:

    您正在使用 show 创建静态 HTML 页面。但是对于on_change,您传递了一个 Python 函数,并且要使其工作,您需要使用 Bokeh 服务器。试试这个例子:https://docs.bokeh.org/en/latest/docs/user_guide/server.html#single-module-format 如果还是不行,请务必发布完整的代码,无需任何修改即可运行。

    【讨论】:

    • 感谢您的回答! :-) 我尝试遵循关于“构建散景应用程序”的部分,因为我最终将不得不结合两种不同的可视化(地图和堆叠条形图)并使它们相互交互(所以当我推动堆叠条形图的一个条时,我希望地图跟随这个)。我是否正确理解它,或者除了构建应用程序之外还有其他方法吗?听起来有点复杂
    • 一点都不复杂!在简单的情况下,您可以将show 替换为curdoc().add_root 并使用bokeh serve 而不是python 运行它。
    • 我明白了,我想我想明白了!使用 bokeh serve 运行它是什么意思?我目前使用的是 Jupyter Notebook 环境。
    • 我试图简单地复制您发送的链接中的代码并尝试查看它是如何工作的,但我无法弄清楚执行以下操作:'bokeh serve --show myapp.py'。
    • 你必须有一些可用的命令行。在那里,您必须激活正确的 Python 虚拟环境(如果有) - Bokeh 应该安装在那里。然后你可以在那里输入bokeh serve 命令,只要确保你在带有myapp.py 的目录中执行此操作。