嵌入为组件时如何在散景图中实现链接缩放和平移

How to Implement linked zooming, panning in bokeh plots when embedded as Components

我有一个 django 网络应用程序,我们在其中渲染多个散景图(时间序列)以提高可用性,要求所有图的 x 轴在所有图(时间)之间链接。我有以下与 bokeh-1.10.0

一起使用的解决方案(伪代码)
plot_1 = figure()
plot_1.line([0,1,2],[1,2,3])
plot_2 =  figure()
plot_2.line([0,1,2],[1,3,9])
plot2.x_range = plot_1.x_range  # This line causes the linking 
script1, div1 = components(plot_1)
script2, div2 = components(plot_2)

然后将 div1、div2 和脚本嵌入到 django 模板中。 Bokeh-js 发挥了神奇作用,因此当 plot_1 缩放时 plot_2 会同时缩放。由于 x_range 个对象具有相同的 ID。

但是对于 bokeh-0.12.1,似乎 bokeh js 第二个图不受第一个图上缩放事件的影响,反之亦然。

如何在类似的嵌入设置中实现链接平移和缩放?

在较新版本的 Bokeh 中(可能自 0.11 起),components 函数可以一次接受多个绘图,对于这个用例来说,这实际上是必要的。原因是对 components return 脚本的不同调用使用不同的 不同 Document 对象。但是,如果您打算以任何方式链接对象,则这些对象都必须在 same Document 中。所以在你的情况下,是这样的:

components((p1, p2))
# returns (script, (div1, div2))

就是你想要的。获得 returned 的单个脚本将替换两个 returned 的 div。

还有其他调用 components 的方法(例如,使用 dict 绘图等)。请参阅 project documentation 了解更多信息。