【发布时间】:2017-03-26 07:12:15
【问题描述】:
我玩散景已经有一段时间了,现在我想创建交互式绘图并将它们在线嵌入(例如,在 WordPress 帖子中)。
然而,即使我花了一些时间审查和测试散景网站示例中的代码,我也很难准确理解 curdoc() 的用途。似乎有必要创建一个带有小部件的散景应用程序,但从我在资源中找到的内容来看,我不太明白。
【问题讨论】:
标签: bokeh
我玩散景已经有一段时间了,现在我想创建交互式绘图并将它们在线嵌入(例如,在 WordPress 帖子中)。
然而,即使我花了一些时间审查和测试散景网站示例中的代码,我也很难准确理解 curdoc() 的用途。似乎有必要创建一个带有小部件的散景应用程序,但从我在资源中找到的内容来看,我不太明白。
【问题讨论】:
标签: bokeh
一些术语是有序的。当您创建散景图时,它由许多较小的对象组成,例如字形、范围、数据源、工具等。图本身基本上是所有这些其他对象的容器。所有这些对象,包括 Plot,都称为 Models。其他模型是布局之类的东西(例如row和column)以及Bokeh内置的小部件(例如Slider或Select)。
对于 Python 端的这些模型中的每一个,都有一个相应的 JavaScript 对象实际实现该模型,并在浏览器中完成所有用于绘图或交互的工作。 Bokeh 的工作方式是它可以自动将 Python 模型的集合转换为一堆 JSON,然后 BokehJS 可以从中重构所有相应的 JS 对象。
Document 是 Bokeh Models 的集合。它是最小的“序列化单元”。也就是说,将单个 Python 模型转换为 JSON(如Plot)通常没有意义,因为该对象可能引用许多其他对象(如轴或字形等)。 Bokeh Document 中的模型都可以以一种有意义的方式一起转换为 JSON。
无论您是制作独立文档(例如使用output_file),还是在 Bokeh 服务器上创建 Bokeh 应用程序,上述所有内容都适用。对于 Bokeh 应用程序,应用程序代码本身实际上只是修改文档的秘诀。因此,每当创建 Bokeh 应用会话时(即,每当用户打开 Bokeh 服务器上的 Bokeh 应用的 URL 时),就会为其创建一个新的 blank Document,然后运行应用代码,其中该会话的新Document 可用作curdoc()。然后应用程序代码可以向该文档添加内容(例如,使用curdoc().add_root(...) 并且一旦应用程序代码完成,“完成”文档就会转换为 JSON 并发送到 BokehJS 以显示给用户。
最后一点要提到的是,Bokeh 服务器的主要目的是确保以这种方式创建的 Bokeh 文档自动与浏览器中的用户视图保持同步。如果用户滑动滑块,则会更新浏览器中 JS 文档中的 Slider 模型,这也会自动更新 Bokeh 服务器中 Python 文档中的 python Slider 对象。应用程序可以对此做出响应,并进行其他更改(比如更新 Python 数据源),这会导致 JS 数据源也更新(从而使绘图发生更改)。这种自动双向同步为 Bokeh 服务器提供了所有复杂的交互功能。
【讨论】:
curdoc() 代表current document 对象之外,我还可以添加无用的部分。