如何在Plotly中为含重复分类的数据每行生成独立柱状图?
解决Plotly柱状图重复分类合并的问题
Plotly Express 的 px.bar 默认会把相同 x 分类的数据聚合求和,导致重复分类的柱子被合并。要让每行数据对应独立柱状条,有两种实用方法:
方法1:添加唯一标识列,替换x轴显示标签
给DataFrame加一个唯一索引列,用它作为x轴的底层标识,再把显示的刻度标签替换回原分类名,既保证每个柱子独立,视觉上又保留分类展示:
import pandas as pd import plotly.express as px df = pd.DataFrame({'x': ['Alpha', 'Beta','Beta','Beta','Gamma','Delta','Delta'], 'y': [12,11,9,7,5,3,1]}) # 新增唯一索引列,确保每个x轴条目唯一 df['unique_id'] = df.index # 绘制柱状图,用unique_id做x轴,原x列做颜色区分 fig = px.bar(df, x='unique_id', y='y', color='x') # 替换x轴刻度为原分类名,调整布局 fig.update_layout( xaxis=dict( tickmode='array', tickvals=df['unique_id'], ticktext=df['x'], title='x' ), barmode='group' # 同分类柱子并排显示 ) fig.show()
方法2:用Graph Objects手动创建每个柱子
如果需要更精细的控制,直接用Plotly Graph Objects为每行数据单独创建柱状条,通过offsetgroup让同分类的柱子归组并排:
import pandas as pd import plotly.graph_objects as go df = pd.DataFrame({'x': ['Alpha', 'Beta','Beta','Beta','Gamma','Delta','Delta'], 'y': [12,11,9,7,5,3,1]}) fig = go.Figure() # 遍历每行数据,逐个添加柱状条 for idx, row in df.iterrows(): fig.add_trace(go.Bar( x=[row['x']], y=[row['y']], name=row['x'], offsetgroup=row['x'] )) # 调整布局,设置分组模式和轴标题 fig.update_layout(barmode='group', xaxis_title='x', yaxis_title='y') fig.show()
这两种方法都能实现每行数据对应独立柱状条的效果,和Excel的展示逻辑一致。
内容的提问来源于stack exchange,提问作者Chris Pitcher
相关产品推荐
相关产品推荐

