是否可以使用回调获取 DataRange1d 对象的当前轴范围?
我见过有关使用回调更新开始和结束的问题,但没有看到有关获取自动选择的范围的问题。
非常感谢。
我希望我可以添加更多信息,但我认为没有什么更有用的可添加。
可以通过设置值来更改
DataRange1d
对象的开始和结束。
下面的示例将 x 轴链接到两个滑块。移动滑块会对可见范围产生影响。
from bokeh.layouts import column
from bokeh.models import CustomJS, Slider
from bokeh.plotting import figure, show, output_notebook
output_notebook()
slider_start = Slider(title="x axis start", start=0, end=10, value=0, step=1)
slider_end = Slider(title="x axis start", start=10, end=20, value=11, step=1)
xs = list(range(1,11))
p = figure(width=300, height=300)
p.line(xs, xs)
slider_start.js_link('value', p.x_range, "start")
slider_end.js_link('value', p.x_range, "end")
show(column(slider_start, slider_end, p))
问题是关于在回调中访问 DataRange1d 对象实例的开始和结束属性。是的,你可以这么做。在下面的示例中,Bokeh 图自动为绘图的 y 轴范围创建一个 DataRange1d 实例,以便自动调整给定的数据。
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource, CustomJS
from bokeh.io import output_notebook
from bokeh.plotting import show
output_notebook()
my_data = {'x': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
'y': [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]}
my_cds = ColumnDataSource(data=my_data)
p = figure(title='range callback test', output_backend='svg')
p.line(x='x',
y='y',
source=my_cds)
cb = CustomJS(args=dict(plot=p),
code="""
let start = plot.y_range.start;
let end = plot.y_range.end;
plot.title.text = 'y-axis range ' + start.toString() + ' to ' + end.toString();""")
p.y_range.js_on_change('start', cb)
p.y_range.js_on_change('end', cb)
show(p)
使用平移或框缩放工具后,Javascript 回调会更改绘图的标题以显示新的 y 轴开始值和结束值。将这个示例加载到笔记本中尝试一下。