在 Bokeh 中链接缩放工具

Linking zoom tools in Bokeh

我正在处理需要在 X 轴上非常精确地放大的可视化 - 缩小到 0.001 个单位,而整个范围可以跨越数百个单位。为此,我想将 Bokeh 与 Spinner 小部件一起使用。这是 X 范围响应微调器的最小示例。方便的是,手动将值输入微调器会如您预期的那样工作。

import numpy as np
from bokeh.io import show
from bokeh.layouts import column, row
from bokeh.models import Spinner
from bokeh.plotting import figure, output_notebook

output_notebook()

x = np.random.rand(10)
y = np.random.rand(10)
p = figure(width=400, height=200, x_range=(0, 1), y_range=(0, 1))

points = p.scatter(x=x, y=y, size=4)
spinner_xmin = Spinner(title="min X", low=0, high=1, step=0.05, value=0, width=80)
spinner_xmax = Spinner(title="max X", low=0, high=1, step=0.05, value=1, width=80)
spinner_xmin.js_link('value', p.x_range, 'start')
spinner_xmax.js_link('value', p.x_range, 'end')
show(column(p, row([spinner_xmin, spinner_xmax], width=400, sizing_mode='stretch_both')))

当我使用 Bokeh 的默认缩放工具时,有没有办法让微调器更新它们的值,以便两个工具可以一起使用?

在其他库(如 Plotly 或其他任何库)中更容易做到吗?

如果您想在微调器中显示 x 轴的变化,您只需像以前一样在另一个方向添加另一个 js-link

将这两行添加到您的代码中以将 x_range 与微调器连接起来。

p.x_range.js_link('start', spinner_xmin, 'value')
p.x_range.js_link('end', spinner_xmax, 'value')

现在你有一个双向连接。

评论

这些工具对您的步长一无所知。因此这些值看起来有点奇怪。但是如果你手动输入一个值也是如此。