如何绘制论文中的三维向量场?现有代码仅生成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
相关产品推荐
相关产品推荐

