如何用Seaborn绘制多实验下不同ML模型准确率的分组条形图?
解决方法
你的问题核心是当前DataFrame是宽格式(列对应模型,行对应实验),而Seaborn的barplot需要**长格式(整洁数据)**才能按要求绘制分组条形图。具体步骤如下:
1. 将宽格式DataFrame转换为长格式
使用Pandas的melt方法,把每个模型的准确率数据拆分为单独的行,同时保留实验标识。
假设你的DataFrame索引是实验名称,先重置索引将实验名转为列,再执行格式转换:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 假设你的原始DataFrame名为df # 重置索引,把实验名称转为名为"实验"的列 df_long = df.reset_index(names="实验") # 转换为长格式:列包含实验、ML模型、准确率 df_long = df_long.melt( id_vars="实验", # 保留的分组列(实验标识) var_name="ML模型", # 原列名(模型名称)对应的新列名 value_name="准确率" # 原单元格数值(准确率)对应的新列名 )
2. 绘制分组条形图
转换完成后,直接指定x为模型列、y为准确率列、hue为实验列即可:
sns.barplot(data=df_long, x="ML模型", y="准确率", hue="实验") plt.title("不同实验下各ML模型的准确率") plt.show()
为什么原代码无法直接运行?
Seaborn的barplot要求输入数据的每一行对应一个独立的数据点,而你的原始宽格式DataFrame中,每个模型列包含多个实验的准确率值,无法通过单一的y参数直接映射。转换为长格式后,每个数据点(某实验下某模型的准确率)都对应一行,才能满足barplot的参数要求。
内容的提问来源于stack exchange,提问作者Rubén López
相关产品推荐
相关产品推荐

