Bokeh多图Vbar组件HoverTooltip仅显示$y值问题求助
Bokeh多图表Vbar配置中HoverTooltip无法显示X值的解决方法
问题场景
在多图表共享合并后DataFrame的Vbar配置场景中,为Vbar添加HoverTooltip时,仅能正常显示Y值,无法显示X值。
已尝试的两种配置方案
- 直接在
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')])
- 将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
相关产品推荐
相关产品推荐

