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

如何让Seaborn绘制的DataFrame子集柱状图与pandas plot效果一致?

解决Seaborn绘制DataFrame子集显示全部分类的问题

原因很明确:你的names列是分类类型,Seaborn默认会保留该列的所有原始分类类别,哪怕你只取了前10行的子集,它还是会渲染全部50个类别(无数据的位置为空);而pandas的绘图工具会自动只展示子集里实际存在的类别。

下面是两种简单的解决方法:

方法1:重置子集的分类类别

取子集后,移除分类列中未被使用的类别,这样Seaborn就只会识别子集里存在的10个类别:

# 取前10行子集并复制,避免修改原DataFrame
df_subset = df.head(10).copy()
# 移除未使用的分类
df_subset['names'] = df_subset['names'].cat.remove_unused_categories()
# 绘图
sns.barplot(data=df_subset, x='names', y='values')

方法2:指定绘图的显示顺序

不需要修改子集的分类结构,直接在barplot中用order参数限定要显示的类别:

df_subset = df.head(10)
# 用子集的names列指定显示顺序,只展示这些类别
sns.barplot(data=df_subset, x='names', y='values', order=df_subset['names'])

两种方法都能让Seaborn的柱状图和pandas plot效果一致,你可以根据需求选择:第一种会永久修改子集的分类属性,后续用该子集绘图都无需再设置;第二种只是临时作用于当前绘图,不改变子集本身。

内容的提问来源于stack exchange,提问作者rustadd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 03:45:48