如何使用seaborn barplot绘制pandas DataFrame两行数据的对比并列柱状图
错误原因分析
- 第一个报错:
sort_values是DataFrame按行排序的方法,你需要的是按第一行的数值给列排序,直接对表示第一行的Series对象排序取索引即可,不需要调用df.sort_values。你原代码中写的df.sort_values(df.iloc[0]...)逻辑错误,才会触发属性报错。 - 第二个报错:seaborn的
barplot要求输入长格式(tidy)数据,不支持直接传入宽表的全列和全值,所以会触发真值判断模糊的报错。
实现步骤与代码
你的思路是对的,确实需要先转换数据结构,直接用pandas的melt方法转长格式即可,完整代码如下:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 示例数据 df = pd.DataFrame({"X_1": [4, 2], "X_2": [2, 3], "X_3": [1, 1]}) # 步骤1:按索引0的数值降序排列列顺序 sorted_cols = df.iloc[0].sort_values(ascending=False).index df_sorted = df[sorted_cols] # 步骤2:宽表转长格式,适配seaborn绘图要求 df_long = df_sorted.reset_index(names='group').melt( id_vars='group', var_name='category', value_name='value' ) # 步骤3:绘制并列柱状图 sns.barplot(data=df_long, x='category', y='value', hue='group') plt.show()
运行后即可得到你预期的效果:列顺序按索引0的数值降序排列,每列对应两个并列柱子,分别展示索引0和1的数值。
内容的提问来源于stack exchange,提问作者Matt Hall
相关产品推荐
相关产品推荐

