我一直玩散景一段时间,我现在正处于创建互动情节并将其嵌入在线的步骤(例如,在WordPress帖子中)。
然而,即使我花了一些时间审查和测试散景网站示例中的代码,我也很难理解curdoc()的目的究竟是什么。为了创建一个带有小部件的散景应用程序似乎是必要的,但是根据我在资源中发现的内容,我不太了解它。
答案 0 :(得分:13)
有些术语是有序的。当您创建散景图时,它由许多较小的对象组成,例如字形,范围,数据源,工具等。而图本身基本上是所有这些其他对象的容器。所有这些对象(包括Plot)都称为 Models 。其他模型就像布局(例如row
和column
)以及内置于Bokeh的小部件(例如Slider
或{{1} })。
对于Python方面的这些模型中的每一个,都有一个实际实现模型的相应JavaScript对象,并在浏览器中完成所有工作以进行绘制或交互。 Bokeh的工作方式是它可以自动将一组Python模型转换成一堆JSON,然后BokehJS可以重新构成所有相应的JS对象。
文档是Bokeh 模型的集合。它是最小的“序列化单元”。也就是说,将单个Python模型转换为JSON(如Select
)通常没有意义,因为该对象可能引用了许多其他对象(如轴或字形等)。所以,a Bokeh Document 中的模型集合都可以以有意义的方式一起转换为JSON。
无论您是制作独立文档(例如使用Plot
),还是在Bokeh服务器上创建Bokeh应用程序,以上所有内容都适用。对于Bokeh应用程序,应用程序代码本身只是修改文档的一个方法。因此,每当创建Bokeh应用程序会话时(即,只要用户打开Bokeh服务器上的散景应用程序的URL),就会为其创建一个新的空白 output_file
,以及应用程序代码已运行,该会话的新Document
可用作Document
。然后,应用程序代码可以向此文档添加内容(例如,使用curdoc()
,一旦应用程序代码完成,“已完成”文档就会转到JSON并发送到BokehJS以向用户显示。 / p>
最后要提到的是,Bokeh服务器的主要目的是确保以这种方式创建的Bokeh文档自动与浏览器中的用户视图保持同步。如果用户擦除滑块,则会更新浏览器中JS文档中的curdoc().add_root(...)
模型,该模型也会自动更新Bokeh服务器中Python文档中的python Slider对象。应用程序可以对此做出响应,并进行其他更改(可能更新Python数据源),这会导致JS数据源也更新(从而使绘图更改)。这种自动双向同步是通过Bokeh服务器提供所有复杂的交互功能的原因。