You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过回调获取DataRange1d对象的当前轴范围?

获取DataRange1d的当前轴范围(通过回调)

当然可以通过回调获取DataRange1d的当前轴范围,不管是自动缩放后的范围还是手动调整的范围,都能通过监听属性变化来获取,以下是两种常用场景的实现方式:

1. JavaScript回调(前端场景)

如果不需要后端交互,直接用CustomJS监听DataRange1d的start和end属性变化,就能实时拿到当前范围:

from bokeh.models import DataRange1d, CustomJS, ColumnDataSource
from bokeh.plotting import figure, show

source = ColumnDataSource(data=dict(x=[1,2,3,4,5], y=[2,4,6,8,10]))
p = figure(x_range=DataRange1d())
p.line('x', 'y', source=source)

# 定义JS回调函数,获取并处理当前轴范围
range_callback = CustomJS(args=dict(x_range=p.x_range), code="""
    const currentStart = x_range.start;
    const currentEnd = x_range.end;
    console.log(`当前X轴范围:${currentStart} - ${currentEnd}`);
    
    // 若需将范围传递给其他组件,可写入数据源
    // source.data = {range_start: [currentStart], range_end: [currentEnd]};
    // source.change.emit();
""")

# 绑定到start和end属性的变化事件
p.x_range.js_on_change('start', range_callback)
p.x_range.js_on_change('end', range_callback)

show(p)

当轴范围自动调整(比如数据更新后自动缩放)或手动拖拽调整时,回调会触发,直接读取x_range.start和x_range.end就能获取当前的实际范围。

2. Python回调(Bokeh Server场景)

如果使用Bokeh Server做后端交互,同样可以监听start和end的属性变化,在Python代码中获取范围:

from bokeh.models import DataRange1d, ColumnDataSource
from bokeh.plotting import figure, curdoc
from bokeh.layouts import column

source = ColumnDataSource(data=dict(x=[1,2,3,4,5], y=[2,4,6,8,10]))
p = figure(x_range=DataRange1d())
p.line('x', 'y', source=source)

def on_range_change(attr, old_val, new_val):
    # 直接访问x_range的start和end属性
    print(f"当前X轴范围:start={p.x_range.start}, end={p.x_range.end}")
    # 这里可根据范围执行后续逻辑,比如过滤数据、更新其他组件等

# 监听start和end的变化
p.x_range.on_change('start', on_range_change)
p.x_range.on_change('end', on_range_change)

curdoc().add_root(column(p))

启动Bokeh Server后,任何导致轴范围变化的操作(自动缩放、手动调整)都会触发回调,此时p.x_range.start和end就是当前的轴范围值。


内容的提问来源于stack exchange,提问作者user17647940

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:00:47