Plotly中barmode=group参数失效,无法生成分组柱状图
解决Plotly分组柱状图显示为堆叠图的问题
你的问题出在没有指定分组依据的字段,Plotly无法识别需要按品牌拆分数据系列,所以默认将同一年份的所有数值堆叠展示。
修改方法
在px.bar()中添加color='Brand'参数,明确按品牌区分不同的柱子系列,同时保留barmode='group'即可实现分组效果:
data=''' Brand 2018 2019 2020 2021 Hersheys 100 200 212 314 MilkyWay 105 106 214 178 Reeses 84 82 95 112 Payday 278 552 214 292 ''' import pandas as pd from io import StringIO import plotly.express as px brand = pd.read_csv(StringIO(data), sep='\s+') brand=pd.melt(brand,id_vars=['Brand'],value_vars=brand.columns) brand=brand.rename(columns={'variable':'Year'}) # 以下计算百分比的代码不影响分组柱状图,可保留或删除 agg_brand=brand[['value','Year']].groupby('Year').agg('sum').reset_index() agg_brand.columns=['Year','value_sum'] brand=pd.merge(brand,agg_brand,on='Year',how='left') brand['percent']=(brand['value']/brand['value_sum']*100).round(1).astype(str)+"%" # 关键修改:添加color='Brand' fig=px.bar(brand,x='Year',y='value',color='Brand',barmode='group') fig.show()
原理说明
你的数据通过melt已经转换成了长格式,每个年份对应多个品牌的数值。Plotly的barmode='group'需要配合color参数来识别不同的数据系列,这样才能将同一年份下不同品牌的柱子并排展示,而不是堆叠。
内容的提问来源于stack exchange,提问作者dlnvss
相关产品推荐
相关产品推荐

