如何修正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
相关产品推荐
相关产品推荐

