用于正确反映hover_data的 Plotly Express 堆积条形图

Plotly express stacked bar chart for reflecting hover_data correctly

提问人:Balepur 提问时间:9/6/2023 最后编辑:EricLavaultBalepur 更新时间:9/6/2023 访问量:44

问:

我有一个名为 的简单数据框,其内容如下:wide_df

Contents of the dataframe

我正在尝试绘制它,使用 plotly 表达如下:

import plotly.express as px
fig = px.bar(wide_df, 
    x=["gold", "silver", "bronze"], 
    y="nation", 
    title="Reasons for Success",  orientation='h' , 
    color_discrete_map={'gold':'green', 'silver':'grey', 'bronze':'red'}, 
    hover_data=['gold reasons', 'silver reasons', 'bronze reasons'])
fig.show()

生成的 px 图如下所示:Plotly stacked bar with color and hover data

虽然所有其他事情似乎都在起作用,但我无法正确处理hover_data。当我将鼠标悬停在上面时,比如加拿大的青铜条,它应该只显示.而它显示了所有原因:.谁能帮我解决这个问题?在线文档和 API 不太容易破译。提前致谢...bronze reasons=sleep, restgold reasons=good food, life style, silver reasons=training, concentration, bronze reasons=sleep, rest

python plotly plotly-python 堆积条形图

评论


答:

1赞 EricLavault 9/6/2023 #1

你遇到的问题是,因为你的数据帧是宽格式的,你必须将 3 列指定为 ,但 Plotly 无法知道每列也有一个对应的列,它只是为每个奖牌列创建 3 条轨迹(由 指定),并将(所有 3 个原因)添加到每个轨迹。['gold reasons', 'silver reasons', 'bronze reasons']hover_data["gold", "silver", "bronze"]xhover_data

使用时,Plotly 实际上将这些数据作为 customdata 添加到后台,并在 hovertemplate 中重复使用它们。您可以手动执行此操作,为每个跟踪指定其对应的原因列,并且仅指定该列:hover_data

fig = px.bar(wide_df,
    x=["gold", "silver", "bronze"],
    y="nation",
    title="Reasons for Success",
    orientation='h',
    color_discrete_map={'gold':'green', 'silver':'grey', 'bronze':'red'}
    )

for i, trace in enumerate(fig.data):
    column = f'{trace.name} reasons'
    fig.data[i]['customdata'] = wide_df[column]
    fig.data[i]['hovertemplate'] += f'<br>{column}=' + '%{customdata}'

您也可以将数据帧从宽格式取消透视到长格式(即使用列),然后您只需执行以下操作:nation, medal, count, reason

fig = px.bar(long_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"
    )

评论

0赞 Balepur 9/7/2023
非常感谢 EricLavault,我可以用宽格式进行管理,问候