Bokeh仪表板部署时widget不显示且报模型归属错误如何解决
报错根因
- Bokeh规定每一个组件模型(包括图表、工具、交互组件等)只能归属到一个文档(Document)实例
- 你调用
pandas_bokeh.plot_grid()方法时,该方法内部已经自动将传入的所有图表及关联工具绑定到了一个新建的文档实例上 - 后续你将
plot_grid返回的图表对象和自定义widget组件拼接后再次调用show(),相当于要把已经绑定到旧文档的模型重复添加到show()自动生成的新文档中,直接触发冲突报错
修复方案
你只需要删除pandas_bokeh.plot_grid调用,改用Bokeh原生的布局方法统一排布所有组件即可,所有组件只会在最终调用show()时绑定一次文档,不会出现重复归属问题。
修改替换代码末尾的如下片段:
widgets = [date_range_slider,category_picker] #Make Dashboard with Grid Layout: plots=pandas_bokeh.plot_grid([[p_line, p_bar,p_stack],[p_scatter, p_pie,p_hist]], plot_width=400) bokehlayout = layout(widgets,plots) show(bokehlayout)
替换为:
# 手动排布图表网格,每个图表宽度设为400和原来参数一致 plots_row1 = row(p_line, p_bar, p_stack, sizing_mode="fixed", width=1200) plots_row2 = row(p_scatter, p_pie, p_hist, sizing_mode="fixed", width=1200) # 拼接交互组件和图表 bokehlayout = column(date_range_slider, category_picker, plots_row1, plots_row2) show(bokehlayout)
修改后运行即可正常渲染所有交互组件和图表,不会再抛出归属冲突错误。
内容的提问来源于stack exchange,提问作者metaltoaster
相关产品推荐
相关产品推荐

