import matplotlib.pyplot as pltimport numpy as npplt.style.use('_mpl-gallery-nogrid')# make datax = np.linspace(-4, 4, 6)y = np.linspace(-4, 4, 6)X, Y = np.meshgrid(x, y)U = X + YV = Y - X# plotfig, ax = plt.subplots()ax.quiver(X, Y, U, V, color="C0", angles='xy', scale_units='xy', scale=5, width=.015)ax.set(xlim=(-6, 6), ylim=(-6, 6))plt.show()
# 1. 导入库和设置样式import matplotlib.pyplot as pltimport numpy as npplt.style.use('_mpl-gallery-nogrid')# 2. 生成网格数据x = np.linspace(-4, 4, 6) # 在 [-4, 4] 区间均匀取 6 个点y = np.linspace(-4, 4, 6)X, Y = np.meshgrid(x, y) # 生成二维网格坐标矩阵,形状均为 (6,6)# x 和 y 分别代表横纵坐标的采样点。# meshgrid 将这两个一维数组组合成网格矩阵 X 和 Y,每个元素对应一个网格点的坐标。# 3. 计算矢量分量U = X + Y # 矢量的 x 方向分量V = Y - X # 矢量的 y 方向分量# 在每个网格点 (X[i,j], Y[i,j]) 处,矢量定义为 (U, V) = (X+Y, Y-X),# 即该点的矢量由坐标本身线性组合而成。# 4. 创建图形并绘制矢量场fig, ax = plt.subplots()ax.quiver(X, Y, U, V, color="C0", angles='xy', scale_units='xy', scale=5, width=.015)# quiver 函数绘制箭头:# X, Y:箭头起点位置。# U, V:箭头在 x、y 方向的分量。# color="C0":使用默认蓝色。# angles='xy':箭头的方向由数据坐标决定(与坐标轴比例一致)。# scale_units='xy' 和 scale=5:将箭头长度缩放 5 倍,且缩放单位与数据单位相同,保证箭头长度与分量数值成比例。# width=.015:箭头杆的宽度。# 5. 设置坐标轴范围并显示ax.set(xlim=(-6, 6), ylim=(-6, 6))# 将显示区域限制在 [-6,6]×[-6,6],比数据范围稍大,避免箭头被截断。plt.show()