是否可以获取DataRange1d对象(Bokeh)的当前轴范围?

问题描述 投票:0回答:2

是否可以使用回调获取 DataRange1d 对象的当前轴范围?

我见过有关使用回调更新开始和结束的问题,但没有看到有关获取自动选择的范围的问题。

非常感谢。

我希望我可以添加更多信息,但我认为没有什么更有用的可添加。

python bokeh
2个回答
0
投票

可以通过设置值来更改

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))

0
投票

问题是关于在回调中访问 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 轴开始值和结束值。将这个示例加载到笔记本中尝试一下。

© www.soinside.com 2019 - 2024. All rights reserved.