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

Plotly分组柱状图按LABEL升序、组内Value降序排序及底部标签移除

问题解决方案

调整思路

  • 你之前的排序逻辑是正确的,但是Plotly自带的多级分类轴排序规则会覆盖你预先排序的结果,因此我们改用自定义连续x轴位置的方式,完全保留预先排好的顺序,同时在不同LABEL分组之间留空做视觉区隔
  • 直接隐藏x轴的全部刻度、标签元素,满足无需重复展示的需求

完整调整后代码

from plotly import graph_objs as go
import plotly.express as px
import pandas as pd

# 测试数据
df = pd.DataFrame({'LABEL': ['1', '1', '2', '2', '3', '3', '3', '3'],
                 'Cat2': ['a',  'b',  'a', 'b', 'c', 'a', 'e', 'f'],
                 'Value': [3, 2, 1, 4, 1, 3, 4, 1]})
# 预先按要求排序:LABEL升序,同LABEL内Value降序
df.sort_values(by=['LABEL', 'Value'], ascending=[True, False], inplace=True)

# 生成自定义x轴位置,不同LABEL分组之间留1个单位的间隔做区隔
x_pos_list = []
current_x = 0
last_label = None
for label in df['LABEL']:
    if last_label is not None and label != last_label:
        current_x += 1
    x_pos_list.append(current_x)
    current_x += 1
df['x_pos'] = x_pos_list

COLOR_MAP = {str(i): c for i, c in enumerate(px.colors.qualitative.Light24)}

fig = go.Figure()

for label in df['LABEL'].unique():
    sub_df = df[df['LABEL'] == label]
    fig.add_trace(go.Bar(
        x=sub_df['x_pos'],
        y=sub_df['Value'],
        marker=dict(color=COLOR_MAP[label]),
        name=f'分组{label}'
    ))

# 布局配置
fig.update_layout(
    legend_title='Cat1',
    xaxis=dict(
        showticklabels=False, # 隐藏x轴标签
        showline=False, # 隐藏x轴线
        showgrid=False, # 隐藏x轴网格线
        zeroline=False
    )
)

fig.show()

效果说明

运行代码后会得到完全符合要求的图表:

  1. 分组顺序严格按LABEL升序排列,每个分组内部的柱子按Value从高到低排列
  2. 底部x轴没有任何标签,仅保留图例做分类说明
  3. 不同分组之间有自然的间隔,视觉上分组清晰

内容的提问来源于stack exchange,提问作者Mateusz Konopelski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:36:01