Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在bokeh的vbar_堆栈中动态更新堆栈值?_Python_Bokeh - Fatal编程技术网

Python 如何在bokeh的vbar_堆栈中动态更新堆栈值?

Python 如何在bokeh的vbar_堆栈中动态更新堆栈值?,python,bokeh,Python,Bokeh,博克版本:0.13 Python版本:3 您好,我有一个用例,在这个用例中,我使用vbar_堆栈来绘制一个列表,比如说公司计数,在一段时间内堆叠。这是一个bokeh应用程序,其中x轴是日期,y轴是计数 我已经能够通过这个工具动态生成x范围 p、 x_范围系数=[] p、 x_range.factors=列表日期 但由于公司列表也在动态变化,我如何在运行时更新堆栈器 我认为堆垛机也不能从CD上取下来,我有点被这件事困住了。我将非常感谢在这方面的任何帮助 编辑以进一步阐述这个问题 对不起,如果我不能

博克版本:0.13

Python版本:3

您好,我有一个用例,在这个用例中,我使用vbar_堆栈来绘制一个列表,比如说公司计数,在一段时间内堆叠。这是一个bokeh应用程序,其中x轴是日期,y轴是计数

我已经能够通过这个工具动态生成x范围 p、 x_范围系数=[] p、 x_range.factors=列表日期

但由于公司列表也在动态变化,我如何在运行时更新堆栈器

我认为堆垛机也不能从CD上取下来,我有点被这件事困住了。我将非常感谢在这方面的任何帮助

编辑以进一步阐述这个问题 对不起,如果我不能正确地表达我的问题陈述,但以下是我正在尝试做的

这是我的数据帧,列名为c1-c3及其计数

{
    "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提供的解决方案好吗?