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

如何修正Plotly堆叠条形图x unified hovermode中的类别顺序?

修正Plotly统一hover模式中的堆叠类别顺序

问题描述

创建了指定类别顺序的Plotly堆叠条形图,图表内类别从下到上按bronze、silver、gold堆叠,符合预期。但在hovermode="x unified"模式下,类别堆叠顺序反转,变为gold、silver、bronze(对应hover列表中的从上到下排序),需要修正该hover顺序使其与图表堆叠顺序一致。

解决方案

问题根源在于Plotly统一hover模式默认按图层z序排序(最上层的trace优先显示在hover中),而堆叠条形图的上层trace对应gold,导致hover顺序反转。我们可以通过手动设置每个trace的hoverrank属性,强制hover按trace的原始顺序排列,从而与图表堆叠顺序匹配。

修改后的代码

import plotly.express as px

long_df = px.data.medals_long()

category_orders = {
    "medal": [
        "bronze",
        "silver",
        "gold",
    ]
}

fig = px.bar(long_df, x="nation", y="count", color="medal", category_orders=category_orders)
fig.update_layout(hovermode="x unified", legend=dict(orientation="h"))

# 手动设置每个trace的hoverrank,确保hover顺序与堆叠顺序一致
for idx, trace in enumerate(fig.data):
    # 索引越小,hoverrank值越小,hover中越靠前
    trace.hoverrank = idx + 1

fig.show()

原理说明

  • hoverrank属性控制trace在统一hover中的显示优先级,数值越小越靠前。
  • 遍历fig.data(按category_orders的顺序生成,即bronze→silver→gold),为每个trace设置递增的hoverrank值,让bronze排在hover列表最前面,gold排在最后,与图表从下到上的堆叠顺序完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:31:17