如何在Seaborn中按DataFrame列名分组绘制箱线图?
解决方法
你之前的问题出在原始DataFrame是宽格式,而Seaborn的boxplot需要长格式数据才能把列名作为X轴的类别选项直接使用——df.keys()不是数据框内的列,自然没法作为参数传入。下面是具体实现步骤:
1. 导入所需库
import seaborn as sns import matplotlib.pyplot as plt import pandas as pd
2. 转换数据格式
把宽格式的DataFrame转成长格式,让原列名成为单独的一列(作为X轴类别),对应数值成为另一列(作为Y轴数据):
# var_name 用来存储原DataFrame的列名,value_name 存储对应列的数值 df_melted = pd.melt(df, var_name="列名", value_name="数值")
3. 绘制箱线图并设置Y轴范围
# 用转换后的长格式数据绘图,X轴选"列名"列,Y轴选"数值"列 sns.boxplot(data=df_melted, x="列名", y="数值") # 固定Y轴范围在0-700之间 plt.ylim(0, 700) # 显示图形 plt.show()
补充说明
如果你之前写y='TAX'是只想单独展示TAX列的分布,那不需要转换格式,直接这样写就行:
sns.boxplot(data=df, y='TAX') plt.ylim(0, 700) plt.show()
但这种方式X轴不会显示所有列名,因为只绘制了TAX一列的箱线图,和你的需求不符,所以还是优先用长格式转换的方法。
内容的提问来源于stack exchange,提问作者Shazazer
相关产品推荐
相关产品推荐

