You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:15:37