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

Seaborn catplot生成箱线图而非预期条形图,求助解决图表差异

Seaborn生成图表不符:箱线图转条形图的解决办法

问题情况

运行以下Seaborn代码后,生成的是箱线图,但预期为展示价格均值的条形图:

import seaborn as sns
import matplotlib.pyplot as plt

from pandas.api.types import CategoricalDtype
diamonds = sns.load_dataset('diamonds')
df= diamonds.copy()
cut_categoriler= ["fair","good","very good","premium","ideal"]
df.cut= df.cut.astype(CategoricalDtype(categories = cut_categoriler, ordered= True))
df.head().T

sns.catplot(x= "cut" ,y= "price",data =df);
plt.show()
  • 当前输出:以cut为横轴、price为纵轴的箱线图,呈现不同切割等级下价格的分布区间
  • 预期输出:以cut为横轴、price为纵轴的条形图,呈现不同切割等级下价格的均值及置信区间

差异原因

Seaborn的catplot()函数默认kind参数值为"box",当同时传入类别型x变量和数值型y变量时,默认生成箱线图,用于可视化数值变量在各分类下的分布特征。若要生成条形图,必须显式指定kind参数类型。

解决方法

在catplot调用中添加kind="bar"参数,即可生成预期的条形图:

import seaborn as sns
import matplotlib.pyplot as plt

from pandas.api.types import CategoricalDtype
diamonds = sns.load_dataset('diamonds')
df= diamonds.copy()
cut_categoriler= ["fair","good","very good","premium","ideal"]
df.cut= df.cut.astype(CategoricalDtype(categories = cut_categoriler, ordered= True))

sns.catplot(x= "cut" ,y= "price", data=df, kind="bar");
plt.show()

注:Seaborn条形图默认计算每个分类下y变量的均值,并显示95%置信区间,与预期图表效果匹配。

内容的提问来源于stack exchange,提问作者ugur çapan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:35:28