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