如何在无日期缺失的Hvplot(Bokeh)K线图中添加悬停数据
解决hvplot.ohlc无日期缺失及悬停工具修复问题
问题说明
需要实现无日期缺失间隔的OHLC蜡烛图,同时修复悬停工具,让它能显示格式化的日期和成交量信息,但原代码输出未达到预期效果。
使用环境
- Python 3.12
- Bokeh 3.3.2
- hvplot 0.9.0
- holoviews 1.18.1
修正代码
import pandas as pd import hvplot.pandas from bokeh.models import HoverTool # 构造带日期间隔的原始数据 data = pd.DataFrame({ "Open": [100.00, 101.25, 102.75], "High": [104.10, 105.50, 110.00], "Low": [94.00, 97.10, 99.20], "Close": [101.15, 99.70, 109.50], "Volume": [10012, 5000, 18000], }, index=[pd.Timestamp("2022-08-01"), pd.Timestamp("2022-08-03"), pd.Timestamp("2022-08-04")]) df = data.reset_index(names="Date") # 添加连续索引,消除日期间隔带来的图表留白 df['Idx'] = pd.RangeIndex(len(df)) # 自定义悬停工具,配置显示字段和格式 custom_hover = HoverTool( tooltips=[ ('日期', '@Date{%Y-%m-%d}'), ('开盘价', '@Open{0.00}'), ('最高价', '@High{0.00}'), ('最低价', '@Low{0.00}'), ('收盘价', '@Close{0.00}'), ('成交量', '@Volume{0}'), ], formatters={'@Date': 'datetime'}, mode='vline' ) # 绘制OHLC图,禁用默认hover配置,使用自定义工具 ohlc_plot = df.hvplot.ohlc( x='Idx', y=['Open', 'High', 'Low', 'Close'], tools=[custom_hover], xlabel='日期' ) # 直接通过hvplot的opts设置x轴刻度标签 ohlc_plot = ohlc_plot.opts( xaxis={'major_label_overrides': {i: dt.strftime('%b %d') for i, dt in enumerate(df['Date'])}} ) # 在Jupyter Notebook中直接展示图表 ohlc_plot
核心修正点
- 移除冲突配置:删掉原代码的
hover_cols参数,避免和自定义HoverTool产生冲突,确保自定义悬停规则生效 - 简化x轴配置:用hvplot原生的
opts方法设置刻度标签,不用额外转成Bokeh对象修改,更简洁 - 悬停格式优化:明确配置日期和数值的显示格式,确保悬停时信息清晰规范
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

