如何调整Holoviews中RangeToolLink的初始选择范围?
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
相关产品推荐
相关产品推荐

