如何用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轴设置实现分组结构:
- 转换数据格式
使用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')
- 绘制目标图表
设置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
相关产品推荐
相关产品推荐

