Plotly Express堆叠条形图hover_data显示异常问题求助
解决Plotly Express堆叠条形图hover_data显示冗余信息的问题
你的问题出在使用宽格式数据绘制堆叠条形图时,hover_data会将指定的所有列都显示出来——因为宽格式中每一行对应一个国家的所有奖牌数据,hover时会读取整行的所有reason列。要实现hover仅显示当前条形对应的reason,需要先将数据转换为长格式,再绘制图表。
解决步骤:
- 将宽格式的
wide_df转换为长格式,让每个奖牌类型对应单独的行,并关联对应的reason列 - 基于长格式数据绘制条形图,此时
hover_data只需指定对应的reason字段
完整代码示例:
import plotly.express as px import pandas as pd # 将宽格式转长格式 melted_df = pd.concat([ # 处理gold相关数据 wide_df[['nation', 'gold', 'gold reasons']] .rename(columns={'gold': 'count', 'gold reasons': 'reason'}) .assign(medal='gold'), # 处理silver相关数据 wide_df[['nation', 'silver', 'silver reasons']] .rename(columns={'silver': 'count', 'silver reasons': 'reason'}) .assign(medal='silver'), # 处理bronze相关数据 wide_df[['nation', 'bronze', 'bronze reasons']] .rename(columns={'bronze': 'count', 'bronze reasons': 'reason'}) .assign(medal='bronze') ]) # 绘制水平堆叠条形图 fig = px.bar( melted_df, x='count', y='nation', color='medal', title="Reasons for Success", orientation='h', color_discrete_map={'gold':'green', 'silver':'grey', 'bronze':'red'}, hover_data=['reason'] # 仅显示当前条形对应的reason ) fig.show()
原理说明:
- 长格式数据中,每一行对应一个国家的单个奖牌类型数据,包含
nation、count、medal和reason四个字段 - 绘制图表时,每个条形对应长格式中的一行数据,hover时只会读取当前行的
reason字段,不会显示其他奖牌类型的reason
内容的提问来源于stack exchange,提问作者Balepur
相关产品推荐
相关产品推荐

