提问人:Balepur 提问时间:9/6/2023 最后编辑:EricLavaultBalepur 更新时间:9/6/2023 访问量:44
用于正确反映hover_data的 Plotly Express 堆积条形图
Plotly express stacked bar chart for reflecting hover_data correctly
问:
我有一个名为 的简单数据框,其内容如下:wide_df
我正在尝试绘制它,使用 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()
虽然所有其他事情似乎都在起作用,但我无法正确处理hover_data。当我将鼠标悬停在上面时,比如加拿大的青铜条,它应该只显示.而它显示了所有原因:.谁能帮我解决这个问题?在线文档和 API 不太容易破译。提前致谢...bronze reasons=sleep, rest
gold reasons=good food, life style, silver reasons=training, concentration, bronze reasons=sleep, rest
答:
你遇到的问题是,因为你的数据帧是宽格式的,你必须将 3 列指定为 ,但 Plotly 无法知道每列也有一个对应的列,它只是为每个奖牌列创建 3 条轨迹(由 指定),并将(所有 3 个原因)添加到每个轨迹。['gold reasons', 'silver reasons', 'bronze reasons']
hover_data
["gold", "silver", "bronze"]
x
hover_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"
)
评论
上一个:熊猫合并 101
下一个:Zygote 不支持突变数组
评论