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

如何在无日期缺失的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

核心修正点

  1. 移除冲突配置:删掉原代码的hover_cols参数,避免和自定义HoverTool产生冲突,确保自定义悬停规则生效
  2. 简化x轴配置:用hvplot原生的opts方法设置刻度标签,不用额外转成Bokeh对象修改,更简洁
  3. 悬停格式优化:明确配置日期和数值的显示格式,确保悬停时信息清晰规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:10:58