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

如何绘制X轴含不同参数的Actual与Predicted分组柱状图

问题原因

核心错误:你直接将Actual/Predicted的类别取值(A/B/C/D)作为X轴维度,Plotly 会默认把相同类别的数据聚合到同一个X轴刻度下分组,不会按原DataFrame的逐行逻辑做独立分组,因此出现同值类别跨行列对齐、分组错乱的问题。

实现思路

要实现逐行一对一对比的效果,核心调整3点:

  • 用原DataFrame的行索引作为X轴的唯一分组标识,保证每一行的Actual、Predicted两个柱子固定在同一个分组下
  • 把类别值(A/B/C/D)作为柱子的文本标注显示,替代直接用类别做X轴刻度
  • 保留原有置信度作为Y轴、Identifier作为颜色区分的逻辑即可
完整实现代码
import pandas as pd
import plotly.express as px

# 测试数据集
df = pd.DataFrame({
    'Actual': ['A', 'B', 'C', 'D'],
    'Predicted': ['A', 'C', 'C', 'D'],
    'Confidence': [0.9, 0.3, 0.6, 0.75]
})

# 构造Actual列对应数据,保留原始行索引
df_actual = pd.DataFrame()
df_actual['row_id'] = df.index
df_actual['Category'] = df['Actual'].copy()
df_actual['Confidence'] = 1
df_actual['Type'] = 'Actual'

# 构造Predicted列对应数据,保留原始行索引
df_predicted = pd.DataFrame()
df_predicted['row_id'] = df.index
df_predicted['Category'] = df['Predicted'].copy()
df_predicted['Confidence'] = df['Confidence'].copy()
df_predicted['Type'] = 'Predicted'

# 合并绘图数据集
df_combined = pd.concat([df_actual, df_predicted], ignore_index=True)

# 绘制分组柱状图
fig = px.bar(
    df_combined,
    x="row_id",
    y="Confidence",
    color='Type',
    barmode='group',
    text="Category",
    height=400
)

# 优化X轴显示
fig.update_xaxes(
    ticktext=[f"样本 {i+1}" for i in df.index],
    tickvals=df.index,
    title="样本分组"
)
# 调整类别文本显示位置
fig.update_traces(textposition='outside')
fig.show()
效果说明

运行代码后,每一行的Actual、Predicted柱子会固定在同一个X轴分组下:

  • Actual柱子高度固定为1,标注对应真实类别
  • Predicted柱子高度为对应置信度,标注对应预测类别
  • 不会再出现相同类别跨分组聚合对齐的问题,完全匹配预期效果。

内容的提问来源于stack exchange,提问作者Mohamed Thasin ah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:42:12