基于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
相关产品推荐
相关产品推荐

