17 向量场 quiver
用途
二维矢量场的方向与大小,如电场、磁场、配网潮流方向、风速场。
示例(5 张)
17-1 双极板间电场强度矢量场

17-2 单根载流导线周围磁场矢量场

17-3 配电网潮流方向与有功流动

17-4 风电场轮毂高度风速矢量场

17-5 接地网附近地表电流密度矢量

代码
以下 5 个函数取自 code/第四批_信号与三维261106.py,直接调用即可出图。版式(宋体 + Times、10 磅、刻度朝内四边、图内无标题、留白自检)由 code/公共配置261106.py 的 setup_cn_style() 与 save() 统一提供。
# 摘自 code/第四批_信号与三维261106.py
def quiver_01():
"""双极板间电场强度矢量场。"""
fig, ax = new_fig(left=0.17, right=0.86)
x = np.linspace(-1.0, 1.0, 17)
y = np.linspace(-1.0, 1.0, 17)
X, Y = np.meshgrid(x, y)
R1 = np.sqrt((X + 0.45) ** 2 + Y ** 2) + 0.08
R2 = np.sqrt((X - 0.45) ** 2 + Y ** 2) + 0.08
Ex = (X + 0.45) / R1 ** 3 - (X - 0.45) / R2 ** 3
Ey = Y / R1 ** 3 - Y / R2 ** 3
mag = np.hypot(Ex, Ey)
q = ax.quiver(X, Y, Ex, Ey, mag, cmap=CMAP_SEQ, scale=90,
width=0.0035, pivot="mid")
ax.quiverkey(q, 0.86, 1.04, 20, r"20 kV/m", labelpos="E", fontproperties={"size": FS - 2})
ax.set_xlabel("水平位置 " + IT["x"] + " / m")
ax.set_ylabel("垂直位置 " + IT["y"] + " / m")
ax.set_aspect("equal")
ax.set_xlim(-1.05, 1.05)
ax.set_ylim(-1.05, 1.05)
cb = fig.colorbar(q, ax=ax, pad=0.02, fraction=0.05)
cb.set_label("场强 " + IT["E"] + " / (kV/m)")
cb.ax.tick_params(direction="in", labelsize=FS - 2, length=2.5, width=0.5)
cb.outline.set_linewidth(0.5)
save(fig, "17_向量场", "17_向量场_双极板电场矢量")
def quiver_02():
"""单根载流导线周围磁场矢量场。"""
fig, ax = new_fig(left=0.17)
x = np.linspace(-0.5, 0.5, 15)
y = np.linspace(-0.5, 0.5, 15)
X, Y = np.meshgrid(x, y)
R2 = X ** 2 + Y ** 2 + 0.012
Hx = -Y / R2
Hy = X / R2
mag = np.hypot(Hx, Hy)
q = ax.quiver(X, Y, Hx, Hy, np.log10(mag + 1), cmap=CMAP_SEQ, scale=26,
width=0.0035, pivot="mid")
ax.plot(0, 0, marker="o", ms=5, color=C2)
ax.text(0.03, 0.03, "导线", fontsize=FS - 1, color=C2)
ax.set_xlabel("水平位置 " + IT["x"] + " / m")
ax.set_ylabel("垂直位置 " + IT["y"] + " / m")
ax.set_aspect("equal")
ax.set_xlim(-0.55, 0.55)
ax.set_ylim(-0.55, 0.55)
save(fig, "17_向量场", "17_向量场_载流导线磁场")
def quiver_03():
"""配电网潮流方向与有功流动。"""
fig, ax = new_fig(left=0.17)
nodes = {
"S": (0.0, 0.0), "N1": (1.5, 0.6), "N2": (1.4, -0.9),
"N3": (3.0, 0.2), "N4": (3.2, -1.1),
}
edges = [("S", "N1", 0.62), ("S", "N2", 0.48), ("N1", "N3", 0.41),
("N2", "N4", 0.33)]
for a, b, w in edges:
xa, ya = nodes[a]
xb, yb = nodes[b]
ax.quiver(xa, ya, xb - xa, yb - ya, angles="xy",
scale_units="xy", scale=1 / 0.86, width=0.006,
color=C1, headwidth=4.5, headlength=6)
ax.text((xa + xb) / 2, (ya + yb) / 2 + 0.09, f"{w:.2f}",
fontsize=FS - 2, ha="center", color=C4)
for k, (x, y) in nodes.items():
ax.plot(x, y, "o", ms=6, color=C2)
ax.text(x, y - 0.26, k, fontsize=FS - 1, ha="center")
ax.set_xlabel("东向距离 " + IT["x"] + " / km")
ax.set_ylabel("北向距离 " + IT["y"] + " / km")
ax.set_xlim(-0.5, 3.9)
ax.set_ylim(-1.7, 1.2)
save(fig, "17_向量场", "17_向量场_配电网潮流方向")
def quiver_04():
"""风电场轮毂高度风速矢量场。"""
fig, ax = new_fig(left=0.17, right=0.86)
x = np.linspace(0, 6, 13)
y = np.linspace(0, 4, 11)
X, Y = np.meshgrid(x, y)
U = 9.5 + 1.6 * np.sin(Y / 1.3) * np.cos(X / 2.4)
V = 1.4 * np.cos(X / 1.9) * np.sin(Y / 1.1) - 0.5
mag = np.hypot(U, V)
q = ax.quiver(X, Y, U, V, mag, cmap=CMAP_SEQ, scale=115,
width=0.0035, pivot="mid")
ax.quiverkey(q, 0.86, 1.04, 4, r"4 m/s", labelpos="E",
fontproperties={"size": FS - 2})
ax.set_xlabel("东向距离 " + IT["x"] + " / km")
ax.set_ylabel("北向距离 " + IT["y"] + " / km")
ax.set_aspect("equal")
ax.set_xlim(-0.2, 6.2)
ax.set_ylim(-0.2, 4.2)
cb = fig.colorbar(q, ax=ax, pad=0.02, fraction=0.05)
cb.set_label("风速 " + IT["v"] + " / (m/s)")
cb.ax.tick_params(direction="in", labelsize=FS - 2, length=2.5, width=0.5)
cb.outline.set_linewidth(0.5)
save(fig, "17_向量场", "17_向量场_风电场风速矢量")
def quiver_05():
"""接地网附近地表电流密度矢量。"""
fig, ax = new_fig(left=0.17, right=0.86)
x = np.linspace(-20, 20, 15)
y = np.linspace(-20, 20, 15)
X, Y = np.meshgrid(x, y)
R = np.sqrt(X ** 2 + Y ** 2) + 1.5
Jx = X / R ** 2 * 240
Jy = Y / R ** 2 * 240
mag = np.hypot(Jx, Jy)
q = ax.quiver(X, Y, Jx, Jy, mag, cmap=CMAP_SEQ, scale=520,
width=0.0035, pivot="mid")
ax.plot(0, 0, marker="s", ms=6, color=C2)
ax.set_xlabel("东向距离 " + IT["x"] + " / m")
ax.set_ylabel("北向距离 " + IT["y"] + " / m")
ax.set_aspect("equal")
ax.set_xlim(-22, 22)
ax.set_ylim(-22, 22)
cb = fig.colorbar(q, ax=ax, pad=0.02, fraction=0.05)
cb.set_label("电流密度 / (A/m²)")
cb.ax.tick_params(direction="in", labelsize=FS - 2, length=2.5, width=0.5)
cb.outline.set_linewidth(0.5)
save(fig, "17_向量场", "17_向量场_接地网地表电流密度")
说明
- 图片 1181×944 px(100 mm × 80 mm @ 300 dpi),三维图为 1181×1122 px。
- 图内不放标题,图题由本文件的标题承担。
- 数据为 10 kV 配网、380 V 低压、50 Hz 量级的仿真算例,随机种子固定,重跑结果一致。
浙公网安备 33010602011771号