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

如何用Plotly在Python中绘制单列堆叠条形图?

解决方案

你的问题出在未开启堆叠模式,且x轴取值错误——你需要把所有规则的权重堆叠到同一个条形中,而非让每个规则对应独立的x轴条目。

修正步骤:

  1. 数据预处理:将percentage列的带%字符串转换为数值,或直接使用weight列(你的weight总和刚好为100,与百分比完全对应)。
  2. 调整Plotly参数:设置统一的x轴类别,开启堆叠模式,优化轴标签与显示样式。

完整代码:

import plotly.express as px
import pandas as pd

# 构造目标DataFrame
data = {
    'rules': ['r1', 'r2', 'r3', 'r4', 'r5', 'r6', 'r7', 'r8', 'r9'],
    'weight': [40, 20, 10, 10, 10, 5, 5, 0, 0],
    'percentage': ['40%', '20%', '10%', '10%', '10%', '5%', '5%', '0%', '0%']
}
df = pd.DataFrame(data)

# 转换百分比为数值(也可直接使用weight列)
df['pct_value'] = df['percentage'].str.replace('%', '').astype(float)

# 绘制单列堆叠水平条形图
fig = px.bar(
    df,
    x=['规则占比']*len(df),  # 统一x轴类别,让所有堆叠集中在一个条形
    y='pct_value',
    color='rules',
    orientation='h',
    barmode='stack',  # 核心:开启堆叠模式
    height=400,
    title='规则占比堆叠图',
    labels={'x': '', 'y': '百分比'}
)

# 隐藏冗余的x轴刻度标签
fig.update_layout(xaxis={'visible': False})

# 给每个堆叠部分添加百分比标签
fig.update_traces(texttemplate='%{y}%', textposition='inside')

fig.show()

关键说明:

  • barmode='stack':强制不同规则的条形叠加,而非并列显示。
  • 统一x轴类别:确保所有规则的占比都堆叠在同一个条形内,符合目标样式。
  • 隐藏x轴刻度:仅一个类别时无需显示多余刻度,让图表更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 03:24:21