如何用Plotly在Python中绘制单列堆叠条形图?
解决方案
你的问题出在未开启堆叠模式,且x轴取值错误——你需要把所有规则的权重堆叠到同一个条形中,而非让每个规则对应独立的x轴条目。
修正步骤:
- 数据预处理:将
percentage列的带%字符串转换为数值,或直接使用weight列(你的weight总和刚好为100,与百分比完全对应)。 - 调整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
相关产品推荐
相关产品推荐

