37 雨云图
37 雨云图
用途
半小提琴 + 箱线 + 散点三合一,一图看清分布、统计量与原始点。
示例(5 张)
37-1 各季节负荷的雨云图(半小提琴 + 箱线 + 散点)

37-2 各馈线电流的雨云图

37-3 四种方案效率的雨云图

37-4 各时段功率因数的雨云图

37-5 各月光伏出力的雨云图

代码
以下 5 个函数取自 code/第六批_组合图261107.py,直接调用即可出图。样式(宋体 + Times、10 磅、刻度朝内四边、留白自检)由 code/公共配置261107.py 的 setup_cn_style() 和 save() 统一提供,本节不再重复。
# 摘自 code/第六批_组合图261107.py
def rc_01():
"""各季节负荷的雨云图(半小提琴 + 箱线 + 散点)。"""
fig, ax = new_fig(left=0.19)
rng = np.random.default_rng(3701)
data = [rng.normal(520, 88, 200), rng.normal(610, 96, 200),
rng.normal(560, 82, 200), rng.normal(665, 104, 200)]
names = ["春季", "夏季", "秋季", "冬季"]
for i, d in enumerate(data):
parts = ax.violinplot([d], positions=[i], widths=0.7,
showextrema=False, showmedians=False)
body = parts["bodies"][0]
verts = body.get_paths()[0].vertices
verts[:, 0] = np.clip(verts[:, 0], None, i)
body.set_facecolor(PALETTE5[i])
body.set_edgecolor("0.35")
body.set_linewidth(0.5)
body.set_alpha(0.85)
ax.boxplot([d], positions=[i + 0.18], widths=0.12, patch_artist=True,
showfliers=False,
boxprops={"facecolor": "white", "edgecolor": "0.3",
"linewidth": 0.6},
medianprops={"color": C2, "linewidth": 1.0},
whiskerprops={"linewidth": 0.5},
capprops={"linewidth": 0.5})
jit = rng.uniform(-0.05, 0.05, 60)
ax.scatter(np.full(60, i - 0.32) + jit, rng.choice(d, 60), s=3,
color=C4, alpha=0.45, linewidths=0)
ax.set_xticks(range(4))
ax.set_xticklabels(names)
ax.set_xlabel("季节")
ax.set_ylabel("有功负荷 " + IT["P"] + " / kW")
ax.set_xlim(-0.6, 3.7)
save(fig, "37_雨云图", "37_雨云图_各季节负荷")
def rc_02():
"""各馈线电流的雨云图。"""
fig, ax = new_fig(left=0.19)
rng = np.random.default_rng(3702)
data = [rng.gamma(9, 32, 200), rng.gamma(11, 26, 200),
rng.gamma(8, 42, 200), rng.gamma(13, 22, 200)]
for i, d in enumerate(data):
parts = ax.violinplot([d], positions=[i], widths=0.7,
showextrema=False, showmedians=False)
body = parts["bodies"][0]
verts = body.get_paths()[0].vertices
verts[:, 0] = np.clip(verts[:, 0], None, i)
body.set_facecolor(PALETTE5[i])
body.set_edgecolor("0.35")
body.set_linewidth(0.5)
body.set_alpha(0.85)
ax.boxplot([d], positions=[i + 0.18], widths=0.12, patch_artist=True,
showfliers=False,
boxprops={"facecolor": "white", "edgecolor": "0.3",
"linewidth": 0.6},
medianprops={"color": C2, "linewidth": 1.0},
whiskerprops={"linewidth": 0.5},
capprops={"linewidth": 0.5})
jit = rng.uniform(-0.05, 0.05, 60)
ax.scatter(np.full(60, i - 0.32) + jit, rng.choice(d, 60), s=3,
color=C4, alpha=0.45, linewidths=0)
ax.set_xticks(range(4))
ax.set_xticklabels(["L1", "L2", "L3", "L4"])
ax.set_xlabel("馈线")
ax.set_ylabel("电流有效值 " + IT["I"] + " / A")
ax.set_xlim(-0.6, 3.7)
save(fig, "37_雨云图", "37_雨云图_各馈线电流")
def rc_03():
"""四种方案效率的雨云图。"""
fig, ax = new_fig(left=0.21)
rng = np.random.default_rng(3703)
data = [rng.normal(0.86, 0.024, 200), rng.normal(0.89, 0.019, 200),
rng.normal(0.91, 0.016, 200), rng.normal(0.92, 0.013, 200)]
for i, d in enumerate(data):
parts = ax.violinplot([d], positions=[i], widths=0.7,
showextrema=False, showmedians=False)
body = parts["bodies"][0]
verts = body.get_paths()[0].vertices
verts[:, 0] = np.clip(verts[:, 0], None, i)
body.set_facecolor(PALETTE4[i])
body.set_edgecolor("0.35")
body.set_linewidth(0.5)
body.set_alpha(0.85)
ax.boxplot([d], positions=[i + 0.18], widths=0.12, patch_artist=True,
showfliers=False,
boxprops={"facecolor": "white", "edgecolor": "0.3",
"linewidth": 0.6},
medianprops={"color": C2, "linewidth": 1.0},
whiskerprops={"linewidth": 0.5},
capprops={"linewidth": 0.5})
jit = rng.uniform(-0.05, 0.05, 60)
ax.scatter(np.full(60, i - 0.32) + jit, rng.choice(d, 60), s=3,
color=C4, alpha=0.45, linewidths=0)
ax.set_xticks(range(4))
ax.set_xticklabels(["策略一", "策略二", "策略三", "策略四"])
ax.set_xlabel("调度策略")
ax.set_ylabel("综合效率 " + IT["eta"])
ax.set_xlim(-0.6, 3.7)
save(fig, "37_雨云图", "37_雨云图_各方案效率")
def rc_04():
"""各时段功率因数的雨云图。"""
fig, ax = new_fig(left=0.19)
rng = np.random.default_rng(3704)
base = [0.87, 0.91, 0.86, 0.94]
data = [rng.normal(b, 0.026, 200) for b in base]
for i, d in enumerate(data):
parts = ax.violinplot([d], positions=[i], widths=0.7,
showextrema=False, showmedians=False)
body = parts["bodies"][0]
verts = body.get_paths()[0].vertices
verts[:, 0] = np.clip(verts[:, 0], None, i)
body.set_facecolor(PALETTE5[i])
body.set_edgecolor("0.35")
body.set_linewidth(0.5)
body.set_alpha(0.85)
ax.boxplot([d], positions=[i + 0.18], widths=0.12, patch_artist=True,
showfliers=False,
boxprops={"facecolor": "white", "edgecolor": "0.3",
"linewidth": 0.6},
medianprops={"color": C2, "linewidth": 1.0},
whiskerprops={"linewidth": 0.5},
capprops={"linewidth": 0.5})
jit = rng.uniform(-0.05, 0.05, 60)
ax.scatter(np.full(60, i - 0.32) + jit, rng.choice(d, 60), s=3,
color=C4, alpha=0.45, linewidths=0)
ax.axhline(0.90, color=C2, lw=0.7, ls="--")
ax.set_xticks(range(4))
ax.set_xticklabels(["0-6", "6-12", "12-18", "18-24"])
ax.set_xlabel("时段 / h")
ax.set_ylabel("功率因数 cos " + IT["phi"])
ax.set_xlim(-0.6, 3.7)
save(fig, "37_雨云图", "37_雨云图_各时段功率因数")
def rc_05():
"""各月光伏出力的雨云图。"""
fig, ax = new_fig(left=0.19)
rng = np.random.default_rng(3705)
means = [210, 340, 470, 486]
data = [rng.normal(m, m * 0.16, 200).clip(0) for m in means]
for i, d in enumerate(data):
parts = ax.violinplot([d], positions=[i], widths=0.7,
showextrema=False, showmedians=False)
body = parts["bodies"][0]
verts = body.get_paths()[0].vertices
verts[:, 0] = np.clip(verts[:, 0], None, i)
body.set_facecolor(PALETTE5[i])
body.set_edgecolor("0.35")
body.set_linewidth(0.5)
body.set_alpha(0.85)
ax.boxplot([d], positions=[i + 0.18], widths=0.12, patch_artist=True,
showfliers=False,
boxprops={"facecolor": "white", "edgecolor": "0.3",
"linewidth": 0.6},
medianprops={"color": C2, "linewidth": 1.0},
whiskerprops={"linewidth": 0.5},
capprops={"linewidth": 0.5})
jit = rng.uniform(-0.05, 0.05, 60)
ax.scatter(np.full(60, i - 0.32) + jit, rng.choice(d, 60), s=3,
color=C4, alpha=0.45, linewidths=0)
ax.set_xticks(range(4))
ax.set_xticklabels(["1 月", "4 月", "7 月", "10 月"])
ax.set_xlabel("月份")
ax.set_ylabel("日均出力 " + IT["P"] + " / kW")
ax.set_xlim(-0.6, 3.7)
save(fig, "37_雨云图", "37_雨云图_各月光伏出力")
说明
- 图片尺寸 1181×944 px(100 mm × 80 mm @ 300 dpi),三维图为 1181×1122 px。
- 图内不放标题,图题由本文件的二级/三级标题承担。
- 数据为贴近广东实际量级的仿真算例,随机种子固定,重跑结果一致。

浙公网安备 33010602011771号