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

如何用Python从DataFrame绘制符合预期的定制化图表?

问题描述

我需要基于以下DataFrame绘制特定样式的柱状图:

Type   Test  Speed  Efficiency  Durability
0  Model A     OK      3           3           3
1  Model A  nonOK      2           2           2
2  Model B     OK      1           1           2
3  Model B  nonOK      3           3           2
4  Model C     OK      3           2           6
5  Model C  nonOK      3           4           0

预期图表样式:

  • 以Type(Model A/B/C)作为x轴的一级分组
  • 每个Type组内,按Speed、Efficiency、Durability三个指标横向拆分为二级子分组
  • 每个指标下,用并列双柱分别展示Test=OK和Test=nonOK的对应数值

我使用Plotly Express编写了基础代码:

fig = px.bar(df, x="Type", y=['Speed', 'Efficiency', 'Durability'],
            color="Test", height=450, width=500)

fig.show()

但生成的图表不符合预期——当前图表是将每个Type组内的三个指标柱堆叠/并列,颜色区分Test,但没有按指标拆分出二级子分组,结构与预期不符。

解决建议

要实现预期样式,需先对DataFrame做长格式转换,再通过多维度x轴设置实现分组结构:

  1. 转换数据格式
    使用pd.melt将宽格式的指标列(Speed、Efficiency、Durability)转为长格式,新增Metric列存储指标名称,Value列存储对应数值:
import pandas as pd
import plotly.express as px

# 构造原DataFrame(若已有可跳过)
df = pd.DataFrame({
    'Type': ['Model A', 'Model A', 'Model B', 'Model B', 'Model C', 'Model C'],
    'Test': ['OK', 'nonOK', 'OK', 'nonOK', 'OK', 'nonOK'],
    'Speed': [3,2,1,3,3,3],
    'Efficiency': [3,2,1,3,2,4],
    'Durability': [3,2,2,2,6,0]
})

# 转换为长格式
df_melted = df.melt(id_vars=['Type', 'Test'], var_name='Metric', value_name='Value')
  1. 绘制目标图表
    设置x=['Type', 'Metric']实现二级分组,同时指定barmode='group'让同指标下的OK/nonOK柱并列:
fig = px.bar(df_melted, x=['Type', 'Metric'], y='Value', color='Test',
             barmode='group', height=450, width=700)

# 可选:调整x轴分类顺序,确保分组逻辑更清晰
fig.update_layout(
    xaxis={
        'categoryorder': 'array',
        'categoryarray': ['Model A', 'Model B', 'Model C', 'Speed', 'Efficiency', 'Durability']
    }
)

fig.show()

生成的图表会完全匹配预期结构:每个Type下拆分出三个指标子分组,每个指标下并列展示OK和nonOK的双柱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:27:24