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

Bokeh多图Vbar组件HoverTooltip仅显示$y值问题求助

Bokeh多图表Vbar配置中HoverTooltip无法显示X值的解决方法

问题场景

在多图表共享合并后DataFrame的Vbar配置场景中,为Vbar添加HoverTooltip时,仅能正常显示Y值,无法显示X值。

已尝试的两种配置方案

  1. 直接在figure()方法中传入tooltips参数
plot_totalall = figure(title="TotalAll_oiExposure",
                       x_range=(optionData_df['Strike'].min(), optionData_df['Strike'].max()),
                        y_range=(optionData_df["total_Greeks2"].min(), optionData_df["total_Greeks2"].max()),
                        tools="hover",
                        tooltips=[("$x", '$y')])
  1. 将Vbar指定为HoverTool的渲染器
vbar_totalall = plot_totalall.vbar(x=initData_totalallvex['x'], top=initData_totalallvex['y'], width=5,
                                   fill_color=initData_totalallvex['colors'])
hover_totalall = HoverTool(tooltips=[('$x','$y')], renderers= [vbar_totalall])
plot_totalall.add_tools(hover_totalall)  

问题原因与修正方法

问题核心是Tooltip的变量引用错误:Bokeh中$x、$y指代的是画布坐标系的像素坐标,而非数据本身的X/Y值。要显示数据中的实际X值,需要用@前缀引用对应的数据字段。

修正方案1(适配第一种配置)

将tooltips中的$x改为对应的数据字段名(用@前缀),如果vbar的x参数绑定的是Strike字段,代码修改如下:

plot_totalall = figure(title="TotalAll_oiExposure",
                       x_range=(optionData_df['Strike'].min(), optionData_df['Strike'].max()),
                        y_range=(optionData_df["total_Greeks2"].min(), optionData_df["total_Greeks2"].max()),
                        tools="hover",
                        tooltips=[("行权价", "@Strike"), ("数值", "@total_Greeks2")])

如果vbar的x参数直接传入的是initData_totalallvex['x'],则用@x引用:

tooltips=[("X值", "@x"), ("Y值", "@y")]

修正方案2(适配第二种配置)

同样修改tooltips的变量引用规则,使用@前缀调用数据字段:

vbar_totalall = plot_totalall.vbar(x=initData_totalallvex['x'], top=initData_totalallvex['y'], width=5,
                                   fill_color=initData_totalallvex['colors'])
hover_totalall = HoverTool(tooltips=[('X值', '@x'), ('Y值', '@y')], renderers= [vbar_totalall])
plot_totalall.add_tools(hover_totalall)  

补充说明:如果你的数据是通过ColumnDataSource传入的,要确保Tooltip中引用的字段名和数据源内的字段完全一致;如果直接传入Series或列表,Bokeh会自动将其命名为x、y,此时用@x、@y即可正常调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:31:04