【问题标题】:What is the purpose of curdoc()?curdoc() 的目的是什么?
【发布时间】:2017-03-26 07:12:15
【问题描述】:

我玩散景已经有一段时间了,现在我想创建交互式绘图并将它们在线嵌入(例如,在 WordPress 帖子中)。

然而,即使我花了一些时间审查和测试散景网站示例中的代码,我也很难准确理解 curdoc() 的用途。似乎有必要创建一个带有小部件的散景应用程序,但从我在资源中找到的内容来看,我不太明白。

【问题讨论】:

    标签: bokeh


    【解决方案1】:

    一些术语是有序的。当您创建散景图时,它由许多较小的对象组成,例如字形、范围、数据源、工具等。图本身基本上是所有这些其他对象的容器。所有这些对象,包括 Plot,都称为 Models。其他模型是布局之类的东西(例如rowcolumn)以及Bokeh内置的小部件(例如SliderSelect)。

    对于 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 对象之外,我还可以添加无用的部分。
    • 没有人能想到一切。开源的承诺是它可以是用户、维护者和其他人之间更广泛的协作,允许一起完成比任何个人甚至小团队更多的事情。我鼓励您通过提交github issue 来帮助改进文档(最好也参与实施)
    • 有一天我希望做出贡献我自己现在正在学习散景。根据您的回答,我假设您是开发人员——如果是这样,恭喜散景很棒!
    • 感谢您的客气话,即使只是问题也将是有价值的贡献。此外,FYI Bokeh 有自己的 Discourse,对于更多开放式问题,通常比 SO 更好:discourse.bokeh.org
    猜你喜欢
    • 2011-03-05
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2018-11-04
    • 2015-01-17
    • 2021-11-05
    相关资源
    最近更新 更多