You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:14:54