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

如何绘制论文中的三维向量场?现有代码仅生成2D图求修正

2D与3D向量场绘制实现方案

目标向量场为 $B = [x,\ py,\ -(p+1)z]$,当 $p=1$ 时,向量场简化为 $B = [x,\ y,\ -2z]$。以下是对应2D截面图和3D完整向量场的实现代码:

一、2D截面向量场(以xy平面z=0为例)

论文中的2D图通常是向量场在某一平面的截面,比如固定z=0时,B的z分量为0,此时仅需绘制xy平面内的向量:

import matplotlib.pyplot as plt
import numpy as np

# 设置参数与网格
p = 1
A = np.linspace(-4, 4, 10)
x, y = np.meshgrid(A, A)
z = 0  # 固定z=0,取xy平面截面

# 计算向量分量
Bx = x
By = p * y
Bz = -(p + 1) * z

# 绘制2D箭袋图
plt.figure(figsize=(6,6))
plt.quiver(x, y, Bx, By, color='blue')
plt.xlabel('x')
plt.ylabel('y')
plt.title('2D向量场(xy平面,z=0)')
plt.grid(True)
plt.axis('equal')
plt.show()

如果需要绘制xz平面(固定y=0),只需调整网格与计算逻辑:

import matplotlib.pyplot as plt
import numpy as np

p = 1
A = np.linspace(-4, 4, 10)
x, z = np.meshgrid(A, A)
y = 0  # 固定y=0,取xz平面截面

Bx = x
By = p * y
Bz = -(p + 1) * z

plt.figure(figsize=(6,6))
plt.quiver(x, z, Bx, Bz, color='red')
plt.xlabel('x')
plt.ylabel('z')
plt.title('2D向量场(xz平面,y=0)')
plt.grid(True)
plt.axis('equal')
plt.show()

二、3D完整向量场

使用matplotlib的3D绘图模块可以绘制完整的3D向量场:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

p = 1
# 生成3D网格(点数不宜过多,避免图形杂乱)
A = np.linspace(-4, 4, 6)
x, y, z = np.meshgrid(A, A, A)

# 计算三个分量
Bx = x
By = p * y
Bz = -(p + 1) * z

# 创建3D绘图对象
fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(111, projection='3d')

# 绘制3D箭袋图,调整箭长与颜色
ax.quiver(x, y, z, Bx, By, Bz, length=0.5, color='green')

# 设置坐标轴标签与标题
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax.set_title('3D向量场')

# 调整视角,让图形更清晰
ax.view_init(elev=30, azim=45)
plt.show()

注意事项

  • 3D绘图时建议减少网格点数(比如从10改为6),否则箭袋过于密集会遮挡结构。
  • 可通过调整quiver的length参数控制箭袋长度,color参数区分不同平面的向量场。
  • 若论文中的2D图是其他截面(比如y=常数),只需固定对应坐标轴的值即可。

内容的提问来源于stack exchange,提问作者SMA47

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:00:17