如何在Python中绘制3D空间内平面形式的2D quiver图
在3D坐标轴中叠加多个2D Quiver图的实现方法
核心思路是将每个2D Quiver图的所有点固定在3D空间的某一平面(比如固定Z轴坐标),同时将向量的垂直于平面的分量设为0,以此在3D轴中展示不同位置的2D向量场。
代码实现(下游方向为Z轴)
import numpy as np import matplotlib.pyplot as plt # 创建3D绘图容器 fig = plt.figure(figsize=(8, 6)) ax = fig.add_subplot(projection='3d') # 生成2D网格与向量场数据(X-Y平面) x, y = np.meshgrid(np.linspace(-2, 2, 5), np.linspace(-2, 2, 5)) # 示例向量场:逆时针旋转场 u = -y v = x # 定义要放置Quiver图的多个下游位置(Z轴上的平面) z_plane_pos = [0, 1, 2] # 可选:给不同平面设置不同颜色 colors = ['tab:blue', 'tab:orange', 'tab:green'] # 循环绘制每个平面的Quiver图 for z, color in zip(z_plane_pos, colors): # 给所有点设置当前Z坐标,向量的Z分量为0 z_coords = np.full_like(x, z) w = np.zeros_like(u) # 垂直于平面的向量分量为0 # 绘制3D空间中的2D Quiver图 ax.quiver(x, y, z_coords, u, v, w, length=0.3, normalize=True, color=color, label=f'Z={z}') # 可选:给每个平面添加透明背景,增强层次感 xx, yy = np.meshgrid(np.linspace(-2.5, 2.5, 2), np.linspace(-2.5, 2.5, 2)) for z in z_plane_pos: zz = np.full_like(xx, z) ax.plot_surface(xx, yy, zz, alpha=0.1, color='gray') # 设置坐标轴与图例 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('下游方向(Z)') ax.legend() # 调整视角,优化展示效果 ax.view_init(elev=30, azim=45) plt.tight_layout() plt.show()
适配下游方向为X轴的修改
如果你的下游方向是X轴,只需调整网格数据与坐标映射:
import numpy as np import matplotlib.pyplot as plt fig = plt.figure(figsize=(8, 6)) ax = fig.add_subplot(projection='3d') # 生成Y-Z平面的网格与向量场 y, z = np.meshgrid(np.linspace(-2, 2, 5), np.linspace(-2, 2, 5)) u = -z v = y # 定义X轴上的多个平面位置 x_plane_pos = [0, 1, 2] colors = ['tab:blue', 'tab:orange', 'tab:green'] for x, color in zip(x_plane_pos, colors): # 固定X坐标,向量的X分量为0 x_coords = np.full_like(y, x) w = np.zeros_like(u) ax.quiver(x_coords, y, z, w, u, v, length=0.3, normalize=True, color=color, label=f'X={x}') # 添加透明平面背景 yy, zz = np.meshgrid(np.linspace(-2.5, 2.5, 2), np.linspace(-2.5, 2.5, 2)) for x in x_plane_pos: xx = np.full_like(yy, x) ax.plot_surface(xx, yy, zz, alpha=0.1, color='gray') ax.set_xlabel('下游方向(X)') ax.set_ylabel('Y') ax.set_zlabel('Z') ax.legend() ax.view_init(elev=30, azim=-45) plt.tight_layout() plt.show()
关键注意事项
- 通过
np.full_like给所有点赋予相同的平面坐标,确保Quiver图处于同一3D平面 - 将向量的垂直平面分量设为0,保留原2D向量场的方向与大小
- 可通过
color参数区分不同平面的Quiver图,alpha调整背景平面透明度增强层次感 length和normalize参数用于统一箭头长度,提升可视化效果
内容的提问来源于stack exchange,提问作者simply_a_student
相关产品推荐
相关产品推荐

