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

如何调整Holoviews中RangeToolLink的初始选择范围?

默认情况下,Holoviews的RangeToolLink会选中绘图的全部区域,用户需后续手动调整或移动选区。如果想自定义初始选择范围,完全可以通过操作底层Bokeh模型实现,具体步骤如下:

实现思路

RangeToolLink本质是基于Bokeh的RangeTool组件,我们可以通过Holoviews的**钩子(hook)**机制,访问到底层的Bokeh绘图对象,直接修改RangeTool的start和end属性,从而指定初始的选中范围。

代码示例(基于官方Demo修改)

import holoviews as hv
from holoviews import opts
hv.extension('bokeh')

# 加载示例股票数据
from bokeh.sampledata.stocks import AAPL
df = hv.Dataset(AAPL, 'date')

# 创建主曲线和缩略图
aapl_curve = df.to(hv.Curve, 'date', 'close')
aapl_thumbnail = aapl_curve.opts(width=800, height=100, yaxis=None)

# 建立RangeToolLink关联
hv.RangeToolLink(aapl_curve, aapl_thumbnail)

# 定义钩子函数,设置初始范围
def set_initial_range(plot, element):
    # 获取RangeTool实例
    range_tool = plot.tools[0]
    # 自定义初始起止日期(这里取数据的第1/4到1/2段)
    start_date = df.data['date'][len(df.data)//4]
    end_date = df.data['date'][len(df.data)//2]
    range_tool.start = start_date
    range_tool.end = end_date

# 给主曲线添加钩子
aapl_curve = aapl_curve.opts(hooks=[set_initial_range])

# 组合显示绘图
(aapl_curve + aapl_thumbnail).opts(opts.Layout(shared_axes=False))

说明

  • 钩子函数set_initial_range会在绘图渲染时触发,我们从中拿到RangeTool对象后,直接赋值start和end即可指定初始选区。
  • 如果你处理的是数值型坐标轴而非日期,只需将start和end换成对应的数值范围即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:40:23