16 频次柱状 countplot
16 频次柱状 countplot
这类图是什么
直接按类别计数画柱,不用先汇总。
看什么:看各类别的出现次数,如故障类型、缺陷等级分布。
5 个案例
16-1 各类故障的次数统计:countplot 直接计数,不用先汇总

16-2 按季节分组的故障类型次数:hue 自动分组并错位

16-3 停电时户数按类型统计

16-4 各电压等级设备数量统计

16-5 检查发现的缺陷等级分布

代码
5 个函数取自 code/第三批_类别图261107.py。关键约束:不调用 sns.set_theme(),否则 font.family 被改成 Arial,中文会变方框;版式由 code/公共配置261107.py 里的 setup_cn_style() 与 save() / save_grid() 统一接管。
# 摘自 code/第三批_类别图261107.py
def cp_01():
"""各类故障的次数统计:countplot 直接计数,不用先汇总。"""
fig, ax = new_fig(left=0.22, bottom=0.22)
data = ["外力破坏"] * 126 + ["设备老化"] * 98 + ["雷击"] * 64 \
+ ["过负荷"] * 38 + ["施工质量"] * 26 + ["其他"] * 14
df = pd.DataFrame({"原因": data})
sns.countplot(data=df, x="原因", hue="原因", palette=PALETTE5,
width=0.6, linewidth=0.5, legend=False, ax=ax)
ax.set_xlabel("故障原因")
ax.set_ylabel("故障次数")
ax.set_ylim(0, 145)
save(fig, "16_频次柱状", "16_频次柱状_故障原因统计")
def cp_02():
"""按季节分组的故障类型次数:hue 自动分组并错位。"""
fig, ax = new_fig(left=0.22, bottom=0.22)
rng = np.random.default_rng(1602)
rows = []
for season, w in [("春夏", 1.0), ("秋冬", 0.7)]:
for cause, n in [("外力", 60), ("老化", 45), ("雷击", 30), ("过负荷", 20)]:
rows += [(cause, season)] * int(n * w * rng.uniform(0.8, 1.2))
df = pd.DataFrame(rows, columns=["原因", "季节"])
sns.countplot(data=df, x="原因", hue="季节", palette=[C5, C3],
width=0.62, linewidth=0.5, ax=ax)
ax.set_xlabel("故障原因")
ax.set_ylabel("故障次数")
ax.set_ylim(0, 78)
legend_in(ax, "upper right", ncol=2)
save(fig, "16_频次柱状", "16_频次柱状_分季节故障")
def cp_03():
"""停电时户数按类型统计。"""
fig, ax = new_fig(left=0.22, bottom=0.22)
data = ["计划检修"] * 186 + ["故障停电"] * 142 + ["限电"] * 88 \
+ ["临时施工"] * 54 + ["用户侧"] * 32
df = pd.DataFrame({"类型": data})
sns.countplot(data=df, x="类型", hue="类型", palette=PALETTE5,
width=0.6, linewidth=0.5, legend=False, ax=ax)
ax.set_xlabel("停电类型")
ax.set_ylabel("停电时户数 / 百户·h")
ax.set_ylim(0, 205)
save(fig, "16_频次柱状", "16_频次柱状_停电类型统计")
def cp_04():
"""各电压等级设备数量统计。"""
fig, ax = new_fig(left=0.19)
data = ["10 kV"] * 128 + ["380 V"] * 96 + ["220 V"] * 62 + ["35 kV"] * 24
df = pd.DataFrame({"电压等级": data})
sns.countplot(data=df, x="电压等级", hue="电压等级", palette=PALETTE4,
width=0.56, linewidth=0.5, legend=False, ax=ax)
ax.set_xlabel("电压等级")
ax.set_ylabel("设备数量 / 台")
ax.set_ylim(0, 145)
save(fig, "16_频次柱状", "16_频次柱状_各电压等级设备")
def cp_05():
"""检查发现的缺陷等级分布。"""
fig, ax = new_fig(left=0.19)
data = ["一般"] * 92 + ["严重"] * 46 + ["危急"] * 18
df = pd.DataFrame({"等级": data})
sns.countplot(data=df, x="等级", hue="等级", palette=[C5, C3, C2],
width=0.5, linewidth=0.5, legend=False, ax=ax)
ax.set_xlabel("缺陷等级")
ax.set_ylabel("缺陷数量 / 项")
ax.set_ylim(0, 108)
save(fig, "16_频次柱状", "16_频次柱状_缺陷等级分布")
说明
- axes 级图 1181×944 px;figure 级多轴图按内容取 1100~1470 px 宽。
- 图内不放标题,图题由本文件的标题承担。
- 数据为 10 kV 配网、380 V 低压、50 Hz 量级的仿真算例,随机种子固定。

浙公网安备 33010602011771号