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

如何在seaborn柱状图x轴展示计数为0的指定顺序分类项

Seaborn固定分类顺序、显示0计数分类柱状图实现方法

核心思路是先通过pandas分类类型预设所有需要展示的类别和固定顺序,避免未出现的分类被统计函数自动过滤,再传入seaborn绘图即可。

  • 预定义严格要求的分类顺序列表,和血压分类函数返回的类别顺序完全一致
  • 将存储分类结果的bp_class列转换为pandas有序分类类型,显式指定所有预设类别,未在数据中出现的类别会被保留
  • 统计频次时不需要额外自动排序,所有类别(含计数为0的类别)都会被统计到
  • 绘图时再次传入分类顺序参数,双重保障x轴展示顺序符合要求

完整可运行代码如下:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 定义固定的血压分类顺序,严格匹配需求
bp_category_order = ["normal", "elevated", "stage1", "stage2", "crisis"]

# 将目标列转换为指定规则的分类类型
df_simple["bp_class"] = pd.Categorical(
    df_simple["bp_class"],
    categories=bp_category_order,
    ordered=True
)

# 统计各分类频次,此时会自动包含观测数为0的分类
bp_counts = df_simple["bp_class"].value_counts(sort=False)

# 绘制柱状图
sns.set_theme(style="whitegrid") # 可选,设置绘图风格
ax = sns.barplot(
    x=bp_counts.index,
    y=bp_counts.values,
    order=bp_category_order # 显式指定x轴顺序,避免排序错乱
)

# 可选:在每个柱子上方标注具体计数值
ax.bar_label(ax.containers[0])

plt.show()

执行后统计得到的频次结果如下,可以看到原本缺失的stage2、crisis分类计数为0,会正常展示在图中:

normal      37
elevated    15
stage1      34
stage2       0
crisis       0
Name: bp_class, dtype: int64

注意:如果不提前将列转为指定类别的Categorical类型,value_counts()会自动丢弃没有观测值的分类,仅返回数据中实际存在的3个分类,无法满足展示全部分类的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:03:24