如何用Plotly底层接口为一维数据(Series)绘制堆叠条形图?
用Plotly底层接口实现与高层接口一致的堆叠条形图
解决方案
要复现px.bar(df_monthly_earnings.T)的堆叠效果,需要为每个月份单独创建一个go.Bar trace,并开启堆叠模式。以下是对应代码:
import plotly.graph_objects as go fig = go.Figure() # 遍历每个月份数据,添加独立的条形图trace for _, row in df_monthly_earnings.iterrows(): fig.add_trace(go.Bar( x=['Earnings'], # 所有trace共享同一个x轴类别 y=[row['Earnings']], name=f"Month {row['Month']}" # 图例显示月份标识 )) # 配置堆叠模式和图表尺寸 fig.update_layout( barmode='stack', width=500, height=500 ) fig.show()
如果你的df_monthly_earnings是以Month为索引的Series,可以改用以下遍历方式:
for month, earnings in df_monthly_earnings.items(): fig.add_trace(go.Bar( x=['Earnings'], y=[earnings], name=f"Month {month}" ))
为什么初始代码不符合预期?
你之前的代码仅创建了一个go.Bar trace,对应所有月份的收入数据,自然无法形成堆叠效果。而高层接口px.bar(df_monthly_earnings.T)会自动完成以下操作:
- 识别转置后DataFrame的每一列(对应每个月份)为独立数据系列
- 为每个系列生成一个
Bartrace,共享同一个x轴类别(转置后的行索引,即Earnings) - 默认启用
barmode='stack',将多个trace堆叠显示
通过手动创建每个月份的trace并开启堆叠模式,就能完全复现高层接口的输出效果。
内容的提问来源于stack exchange,提问作者Maran
相关产品推荐
相关产品推荐

