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

