在 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')
现在你有一个双向连接。
评论
这些工具对您的步长一无所知。因此这些值看起来有点奇怪。但是如果你手动输入一个值也是如此。
我正在处理需要在 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')
现在你有一个双向连接。
评论
这些工具对您的步长一无所知。因此这些值看起来有点奇怪。但是如果你手动输入一个值也是如此。