如何将Python-Dash单柱状图转换为堆叠柱状图?
如何将Dash单系列柱状图修改为堆叠柱状图?
你原来的代码是基于单列数据生成柱状图,现在要改成堆叠的,核心是要针对两个数据系列分别创建go.Bar trace,并且把布局里的barmode设置为'stack'(你之前示例用的'group'是分组柱状图,不是堆叠哦)。
步骤说明:
- 首先确保你的Excel文件
Analysis.xlsx里有三列:Marketsegment(作为x轴分类)、Total Residential、Business(这两列是要堆叠的数值) - 为每个系列创建独立的
go.Bar对象,指定对应的y轴数据和系列名称 - 在图表布局中设置
barmode='stack'启用堆叠模式
修改后的完整代码:
import pandas as pd import plotly.graph_objects as go from dash import Dash, html, dcc # 读取Excel数据 df1 = pd.read_excel("C:/Users/Tim/PycharmProjects/firstdash/Analysis.xlsx") app = Dash(__name__) app.layout = html.Div( [ html.H3("Graph 1: Stacked Bar Chart"), dcc.Graph( id="g1", figure={ "data": [ # 第一个系列:Total Residential go.Bar( x=df1["Marketsegment"], y=df1["Total Residential"], name="Total Residential", marker_color="#1f77b4" # 可选:自定义颜色 ), # 第二个系列:Business go.Bar( x=df1["Marketsegment"], y=df1["Business"], name="Business", marker_color="#ff7f0e" # 可选:自定义颜色 ) ], "layout": go.Layout( barmode="stack", # *关键*:设置为堆叠模式 xaxis_title="Market Segment", yaxis_title="Value", title="Market Segment Breakdown" ) } ) ] ) if __name__ == "__main__": app.run_server(debug=True)
关键注意点:
- 关键:两个
go.Bar的x轴必须使用相同的列(df1["Marketsegment"]),这样才能正确对齐堆叠 - 关键:
barmode一定要设为'stack',而不是你之前示例里的'group'(后者是分组并排显示) - 如果你的Excel列名和我假设的不一样,记得替换成你实际的列名(比如如果列名是
Total_Residential,就改成df1["Total_Residential"])
内容的提问来源于stack exchange,提问作者isic5
相关产品推荐
相关产品推荐

