Python 如何在bokeh的vbar_堆栈中动态更新堆栈值?
博克版本:0.13 Python版本:3 您好,我有一个用例,在这个用例中,我使用vbar_堆栈来绘制一个列表,比如说公司计数,在一段时间内堆叠。这是一个bokeh应用程序,其中x轴是日期,y轴是计数 我已经能够通过这个工具动态生成x范围 p、 x_范围系数=[] p、 x_range.factors=列表日期 但由于公司列表也在动态变化,我如何在运行时更新堆栈器 我认为堆垛机也不能从CD上取下来,我有点被这件事困住了。我将非常感谢在这方面的任何帮助 编辑以进一步阐述这个问题 对不起,如果我不能正确地表达我的问题陈述,但以下是我正在尝试做的 这是我的数据帧,列名为c1-c3及其计数Python 如何在bokeh的vbar_堆栈中动态更新堆栈值?,python,bokeh,Python,Bokeh,博克版本:0.13 Python版本:3 您好,我有一个用例,在这个用例中,我使用vbar_堆栈来绘制一个列表,比如说公司计数,在一段时间内堆叠。这是一个bokeh应用程序,其中x轴是日期,y轴是计数 我已经能够通过这个工具动态生成x范围 p、 x_范围系数=[] p、 x_range.factors=列表日期 但由于公司列表也在动态变化,我如何在运行时更新堆栈器 我认为堆垛机也不能从CD上取下来,我有点被这件事困住了。我将非常感谢在这方面的任何帮助 编辑以进一步阐述这个问题 对不起,如果我不能
{
"c1": [1, 2, 3],
"c2": [1, 4, 6],
"c3": [6, 2, 4],
"dates": ['21-06-2018', '22-06-2018', '23-06-2018']
}
日期在x轴上,c1-c3堆叠在一起。请注意,这在serverApp上运行。用户可以从下拉列表中选择日期范围,因此,日期以及这些c1…cn本质上是动态的
目前,我正在使用以下两种方法:
我更新列数据源和x_range p.x_range.factors=[],p.x_range.factors=listdates
然后,我再次调用vbar_堆栈,但这是叠加在前面的图形上
我设置p.renderes=[]这解决了叠加问题,但它清除了所有轴标题工具栏和图例。
我试着明确设置,但不起作用
我们最近开始使用Bokeh,我不确定我使用的方法是否正确
有人能帮忙吗?
谢谢
vbar\U堆栈实际上只是手动定义具有堆叠值的多个vbar的快捷方式。如果手动定义VBAR,则以后更容易附加渲染器:
rendered_companies = []
def add_company_renderer(company):
p.vbar(bottom=stack(*rendered_companies), top=stack(*(rendered_companies + [company]))
rendered_companies.append(company)
for company in original_companies:
add_company_renderer(company)
然后,如果我们添加一个公司,我们只需再次调用该函数
如果不是删除所有渲染器,而是仅删除vbar渲染器,则再次调用vbar_堆栈的方法也应该有效。我还没有测试过它,但以下应该可以工作:
vbar=p.vbar\u堆栈。。。
...
def回调:
对于vbar中的vbar:
p、 renderers.removevbar
p、 vbar\u堆栈新\u数据
这可能会导致重新绘制,可能会丢失缩放/选定的图示符/项目,因此我认为第一种方法更好
如果以后还需要删除公司,也可以将手动创建的VBAR保存在dict中,然后根据需要将其从绘图中删除
rendered_companies = []
renderers = {}
def add_company_renderer(company):
vbar = p.vbar(bottom=stack(*rendered_companies), top=stack(*(rendered_companies + [company]))
rendered_companies.append(company)
renderers[company] = vbar
for company in original_companies:
add_company_renderer(company)
def callback(company):
renderer = renderers.get(company)
if renderer:
p.renderers.remove(renderer)
简单地更改CD源不起作用吗?@syntonym Stackers参数不可能通过CD给出。我仍然没有解决这个问题,您是使用python服务器部署还是仅使用静态html?@syntonym我部署了it@syntonym我已经更新了问题SYNTONYM我一直在Gitter上与Bryan Van de Ven@bryevdv交谈。他提出了一个解决方案,对我来说,这个解决方案对vbar_堆栈本身是有效的。你使用vbar是正确的,它可能更容易。很好!“你能把这种方法作为一种自我回答,然后接受这样一个事实,即其他人发现你的问题也会找到你的答案吗?”Zainul Abideen说。请你用vbar_stack更新Bryan Van de Ven提供的解决方案好吗?