Python Bokeh在布局中绘制多个图表会引发错误:(子图和根图)

Python Bokeh在布局中绘制多个图表会引发错误:(子图和根图),python,django,plot,bokeh,Python,Django,Plot,Bokeh,今天,我在使用Bokeh0.11.1创建一个可视化数据的web应用程序时寻求一些帮助 首先,我使用Python2.7和Django 1.9.5运行该应用程序。我用PyCharm专业版编程,所有这些都在Windows7上运行 起初,Bokeh对我来说一切都很好,我创建了一些函数来绘制绘图,并将它们添加到我的模板中。当我创建了几个不同的绘图函数时,我认为像这样继续下去是个坏主意,也就是说,一个接一个地绘制每个绘图,并将其javascript添加到我的模板中 我之所以想这样做,是因为我认为每次你要求B

今天,我在使用Bokeh0.11.1创建一个可视化数据的web应用程序时寻求一些帮助

首先,我使用Python2.7和Django 1.9.5运行该应用程序。我用PyCharm专业版编程,所有这些都在Windows7上运行

起初,Bokeh对我来说一切都很好,我创建了一些函数来绘制绘图,并将它们添加到我的模板中。当我创建了几个不同的绘图函数时,我认为像这样继续下去是个坏主意,也就是说,一个接一个地绘制每个绘图,并将其javascript添加到我的模板中

我之所以想这样做,是因为我认为每次你要求Bokeh绘制一张图表时,它都会用javascript编写许多冗余函数。毕竟,生成的任何javascript都是独立的。我认为,如果我让Bokeh在同一个布局中绘制所有图表,它将不会编写相同javascript函数的X倍。此外,在我的python代码中,对于每个图表/绘图,发送一个布局比发送一个包含javascript的字符串更干净

因此,我尝试在同一布局中嵌入多个绘图,正如Bokeh 0.11.1文档中的示例所示:

from bokeh.io import output_file, show, vplot
from bokeh.plotting import figure

output_file("layout.html")

x = list(range(11))
y0 = x
y1 = [10 - i for i in x]
y2 = [abs(i - 5) for i in x]

# create a new plot
s1 = figure(width=250, plot_height=250, title=None)
s1.circle(x, y0, size=10, color="navy", alpha=0.5)

# create another one
s2 = figure(width=250, height=250, title=None)
s2.triangle(x, y1, size=10, color="firebrick", alpha=0.5)

# create and another
s3 = figure(width=250, height=250, title=None)
s3.square(x, y2, size=10, color="olive", alpha=0.5)

# put all the plots in a VBox
p = vplot(s1, s2, s3)

# show the results
show(p)
当我使用它创建Bokeh vform并用Django显示它时,我的页面仍然是空白的。hplot、vform和gridplot也发生了同样的事情

然后,我尝试在PyCharm python控制台中运行我的代码,以更好地理解问题所在,在运行bokeh示例中的代码(以及我自己的代码)时,控制台返回:

错误:C:\Python27\lib\site packages\bokeh\core\validation\check.py:W-1004(子对象和根对象):如果模型位于布局框中,则它们不应是文档根:Figure,ViewModel:Plot,ref\u id:77ff5340-e67d-4802-8997-79e84e19d206

错误:C:\Python27\lib\site packages\bokeh\core\validation\check.py:W-1004(子级和根级):如果模型位于布局框中,则它们不应是文档根目录:Figure,ViewModel:Plot,ref(id:77ff5340-e67d-4802-8997-79e84e19d206,图表,ViewModel:Plot,ref(id:f725c7c5-fade-48f6-a4f8-a159dc32002e,图表,ViewModel:Plot,参考id:c96b8132-53c2-44f6-9ae9-b27bab1dcf85,图表,视图模型:绘图,参考id:320afbf4-03f5-4b78-b299-d1799fb607c8

然后,我的默认浏览器打开并显示layout.html文件,该文件保持空白

我已经在网上搜索了问题应该是什么。正如人们所说,我一个接一个地更改了图的每个实例。然而,它不起作用,而且我的主应用程序使用的是条形图和散点图,它们也不起作用

在另一个话题中,据说问题可能来自PyCharm。但是我不认为这是问题所在,手动打开layout.html也会显示一个空白页面,当我不尝试将其嵌入单个vplot或vform,而是逐个显示时,我的绘图和图表工作正常

我以前也遇到过类似的问题,因为我使用了vplothplot而不是vform,所以我尝试将一些Bokeh小部件添加到图表中。所以这不是我今天要面对的,我正确地使用bokeh vform来正确显示我的小部件

考虑到文档中给出的示例都不起作用,我真的很想知道到底出了什么问题。我做错了什么?在使用vforms/plot之前,我需要做些什么

谢谢你的帮助

编辑2016年4月26日:

有人帮了我一把博克的谷歌集团。以下是一些目前不适用于我的解决方案,但可能会帮助出现相同错误的人:

-使用vbox或vplot而不是vform(在我的情况下不会工作,因为我使用的是小部件,我需要一个vform)


-使用p.add_布局手动扩展渲染器Bokeh在它还是一个较年轻的库时经历了很多更改和实验,但事情终于解决了。自发布此问题以来,已删除了
vform
vplot
等功能,并解决了此处描述的问题。在任何最新版本中,用户都应该使用
column
layout函数来获取一列绘图或小部件,并且它的行为符合预期。以下是更新的示例:

from bokeh.io import output_file, show
from bokeh.layouts import column
from bokeh.plotting import figure

output_file("layout.html")

x = list(range(11))
y0 = x
y1 = [10 - i for i in x]
y2 = [abs(i - 5) for i in x]

# create a new plot
s1 = figure(width=250, plot_height=250, title=None)
s1.circle(x, y0, size=10, color="navy", alpha=0.5)

# create another one
s2 = figure(width=250, height=250, title=None)
s2.triangle(x, y1, size=10, color="firebrick", alpha=0.5)

# create and another
s3 = figure(width=250, height=250, title=None)
s3.square(x, y2, size=10, color="olive", alpha=0.5)

# put all the plots in a VBox
p = column(s1, s2, s3)

# show the results
show(p)