如何在Plotly柱状图中添加指定列的悬停展示效果
Plotly 柱状图自定义悬停展示字段解决方案
核心调整逻辑
- 渲染列筛选:仅保留SKU列作为柱状图的y轴渲染字段,排除
Total_accounts、Total_purchases两个统计列,同时计算SKU占比时也仅用SKU列计算,避免统计值干扰占比结果 - 自定义悬停数据:通过
custom_data参数传入需要额外展示的两个统计列,再修改悬停模板完成字段展示
完整修改后代码
# 筛选所有SKU列,排除日期和统计列 sku_cols = [c for c in df.columns if c not in ["Date", "Total_accounts", "Total_purchases"]] # 数据预处理:计算SKU列的行占比,再合并回统计列保证行对应 processed_df = df.set_index("Date")[sku_cols]\ .pipe(lambda d: d.div(d.sum(axis=1), axis=0))\ .reset_index()\ .merge(df[["Date", "Total_accounts", "Total_purchases"]], on="Date") fig = px.bar( processed_df, x="Date", y=sku_cols, # 传入需要额外展示的统计列作为自定义悬停数据 custom_data=["Total_accounts", "Total_purchases"] ).update_xaxes( title='Test', visible=True, showticklabels=True ).update_yaxes( title='Test', visible=True, showticklabels=False ).update_traces( # 自定义悬停模板,可根据需求调整展示格式 hovertemplate=''' 日期: %{x}<br> SKU占比: %{y:.2%}<br> 总账户数: %{customdata[0]}<br> 总购买量: %{customdata[1]} <extra></extra> ''' ) fig.show()
说明
custom_data传入的字段顺序和hovertemplate中customdata[index]的索引一一对应- 模板末尾的
<extra></extra>用于隐藏Plotly默认展示的trace名称,如需保留SKU名称展示可删除这段内容 - 如果SKU列有固定命名规则(比如均以
Sku开头),可将sku_cols的筛选逻辑改为[c for c in df.columns if c.startswith("Sku")],适配性更高
内容的提问来源于stack exchange,提问作者titu84hh
相关产品推荐
相关产品推荐

