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

基于DataFrame两列绘制分组柱状图的问题求助

实现按实验类型分组、磁盘类型区分的柱状图

问题场景

现有如下结构的DataFrame,需要绘制分组柱状图:

  • X轴为exp_type的两个类别(Random Read/Seq Read)
  • Y轴为avg数值
  • 以disk_type作为图例,每个实验类型下展示对应不同磁盘的数值

原始DataFrame:

exp_type disk_type          avg
0  Random Read      nvme  3120.240000
1  Random Read       sda   132.638831
2  Random Read       sdb   174.313413
3     Seq Read      nvme  3137.849000
4     Seq Read       sda   119.171269
5     Seq Read       sdb   211.451616

原代码无法实现分组展示:

def plot(df):
    df.plot(x='exp_type', y=['avg'], kind='bar')
    print(df)

解决方案

方法1:Pandas透视表 + 内置绘图

先通过pivot将数据重组为分组格式,再绘制柱状图:

import pandas as pd
import matplotlib.pyplot as plt

# 透视重组数据:exp_type为行索引,disk_type为列,avg为值
pivoted_df = df.pivot(index='exp_type', columns='disk_type', values='avg')

# 绘制分组柱状图
pivoted_df.plot(kind='bar', figsize=(8, 5))
plt.xlabel('实验类型')
plt.ylabel('平均性能')
plt.title('不同磁盘类型的读写性能对比')
plt.legend(title='磁盘类型')
plt.show()

方法2:Seaborn自动分组(更简洁)

用Seaborn的catplot,无需手动重组数据,直接通过hue参数指定分组维度:

import seaborn as sns
import matplotlib.pyplot as plt

sns.catplot(
    data=df,
    x='exp_type',
    y='avg',
    hue='disk_type',
    kind='bar',
    height=5,
    aspect=1.2
)
plt.title('不同磁盘类型的读写性能对比')
plt.show()

原代码问题说明

原代码直接以exp_type为X轴、avg为Y轴绘图,Pandas会把每一行数据单独画成柱子,相同exp_type的柱子会重叠或无规则排列,没有把disk_type作为分组依据,因此无法实现预期的分组展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:39:53