27 三维散点 scatter3D
27 三维散点 scatter3D
用途
三个变量同时呈现,如转速—转矩—效率。
示例(5 张)
27-1 三日负荷的三维散点(P-Q-t)

27-2 电机转速—转矩—效率三维工况点

27-3 三维空间测点电位分布

27-4 谐波次数—节点—幅值三维散点

27-5 电池 SOC—温度—容量三维散点

代码
以下 5 个函数取自 code/第四批_三维扩展261107.py,直接调用即可出图。样式(宋体 + Times、10 磅、刻度朝内四边、留白自检)由 code/公共配置261107.py 的 setup_cn_style() 和 save() 统一提供,本节不再重复。
# 摘自 code/第四批_三维扩展261107.py
def s3_01():
"""三日负荷的三维散点(P-Q-t)。"""
fig, ax = new_fig3d(right=0.86, left=0.13)
rng = np.random.default_rng(2701)
t = rng.uniform(0, 72, 800)
p = 440 + 160 * np.sin(2 * np.pi * t / 24) + rng.normal(0, 26, 800)
q = 0.42 * p + rng.normal(0, 30, 800)
s = ax.scatter(t, p, q, c=q, cmap=CMAP_SEQ, s=4, depthshade=False)
ax.set_xlabel("时间 " + IT["t"] + " / h", labelpad=2)
ax.set_ylabel("有功 " + IT["P"] + " / kW", labelpad=2)
ax.set_zlabel("无功 " + IT["Q"] + " / kvar", labelpad=2)
ax.view_init(elev=22, azim=-128)
_k3(fig, ax, s, "无功 " + IT["Q"] + " / kvar")
save(fig, "27_三维散点", "27_三维散点_三日负荷散点")
def s3_02():
"""电机转速—转矩—效率三维工况点。"""
fig, ax = new_fig3d(right=0.86, left=0.13)
rng = np.random.default_rng(2702)
n = rng.uniform(700, 2900, 700)
tq = rng.uniform(5, 115, 700)
eta = 94.5 - 8.0 * ((tq - 62) / 90) ** 2 - 3.4 * ((n - 2100) / 1500) ** 2 \
+ rng.normal(0, 0.4, 700)
s = ax.scatter(n, tq, eta, c=eta, cmap=CMAP_SEQ, s=4, depthshade=False)
ax.set_xlabel("转速 " + IT["n"] + " / (r/min)", labelpad=2)
ax.set_ylabel("转矩 " + IT["T"] + " / (N·m)", labelpad=2)
ax.set_zlabel("效率 " + IT["eta"] + " / %", labelpad=2)
ax.view_init(elev=24, azim=-130)
_k3(fig, ax, s, "效率 " + IT["eta"] + " / %")
save(fig, "27_三维散点", "27_三维散点_电机工况点")
def s3_03():
"""三维空间测点电位分布。"""
fig, ax = new_fig3d(right=0.86, left=0.13)
rng = np.random.default_rng(2703)
x = rng.uniform(0, 30, 500)
y = rng.uniform(0, 30, 500)
z = rng.uniform(0, 3, 500)
V = np.zeros_like(x)
for gx, gy, k in [(10, 10, 1.0), (22, 18, 0.8)]:
V += k / np.sqrt((x - gx) ** 2 + (y - gy) ** 2 + (z + 1.0) ** 2) * 42
s = ax.scatter(x, y, z, c=V, cmap=CMAP_SEQ, s=4, depthshade=False)
ax.set_xlabel("东向距离 / m", labelpad=2)
ax.set_ylabel("北向距离 / m", labelpad=2)
ax.set_zlabel("深度 / m", labelpad=2)
ax.view_init(elev=24, azim=-126)
_k3(fig, ax, s, "电位 " + IT["U"] + " / V")
save(fig, "27_三维散点", "27_三维散点_三维测点电位")
def s3_04():
"""谐波次数—节点—幅值三维散点。"""
fig, ax = new_fig3d(right=0.86, left=0.13)
rng = np.random.default_rng(2704)
nodes = np.repeat(np.arange(1, 13), 6)
orders = np.tile([3, 5, 7, 9, 11, 13], 12)
amp = 32 / orders ** 0.9 * (1 + 0.5 * rng.random(nodes.size))
s = ax.scatter(orders, nodes, amp, c=amp, cmap=CMAP_SEQ, s=22,
depthshade=False)
ax.set_xlabel("谐波次数 " + IT["h"], labelpad=2)
ax.set_ylabel("节点", labelpad=2)
ax.set_zlabel("幅值 " + IT["I"] + SUB["h"] + " / A", labelpad=2)
ax.view_init(elev=24, azim=-126)
_k3(fig, ax, s, IT["I"] + SUB["h"] + " / A")
save(fig, "27_三维散点", "27_三维散点_谐波三维分布")
def s3_05():
"""电池 SOC—温度—容量三维散点。"""
fig, ax = new_fig3d(right=0.86, left=0.13)
rng = np.random.default_rng(2705)
soc = rng.uniform(0, 100, 600)
temp = rng.uniform(-20, 45, 600)
cap = (100 * (1 - 0.0042 * np.abs(temp - 25) ** 1.35)
* (0.86 + 0.14 * soc / 100) + rng.normal(0, 1.2, 600))
s = ax.scatter(soc, temp, cap, c=cap, cmap=CMAP_SEQ, s=5, depthshade=False)
ax.set_xlabel("荷电状态 SOC / %", labelpad=2)
ax.set_ylabel("温度 " + IT["T"] + " / °C", labelpad=2)
ax.set_zlabel("可用容量 / %", labelpad=2)
ax.view_init(elev=24, azim=-128)
_k3(fig, ax, s, "可用容量 / %")
save(fig, "27_三维散点", "27_三维散点_电池三维特性")
说明
- 图片尺寸 1181×944 px(100 mm × 80 mm @ 300 dpi),三维图为 1181×1122 px。
- 图内不放标题,图题由本文件的二级/三级标题承担。
- 数据为贴近广东实际量级的仿真算例,随机种子固定,重跑结果一致。

浙公网安备 33010602011771号