矢量字段无法正确显示matplotlib

时间:2015-05-20 17:50:46

标签: python matplotlib

我试图用matplotlib绘制一个矢量场,但它没有正确绘制,我无法弄清楚我做错了什么。

要绘制的矢量场是固定高度的无限长直线的磁场。我应该得到的是:

enter image description here

我知道矢量场的方程(在圆柱坐标系中)是:

B(r)=(u0 / 2 * pi)*(i / r)

其中: u0是一个常数(正), 我是电线中的电流, r是线的距离(z轴)。

以下是使用以下代码获得的图片: enter image description here 如您所见,除了导线中心的问题外,左半部分的矢量指向错误的方向。 此外,是否有功能在3d中绘制字段?比如matlab中的quiver3? 感谢

x,y = np.meshgrid(x,y)

def E(x,y):
    i = 3
    mu = 2
    mag = (mu/(2*np.pi))*(i/np.sqrt((x)**2+(y)**2))
    ey = mag * (np.cos(np.arctan(y/x)))
    ex = mag * (-np.sin(np.arctan(y/x)))
    return ex,ey

ex,ey = E(x,y)
plt.quiver(x,y,ex,ey,pivot='middle',color='r',headwidth=4,headlength=6)
plt.show()

1 个答案:

答案 0 :(得分:3)

  1. 核心处的长箭头是由于磁场非常靠近电线而爆炸。删除/屏蔽网格中与某些r=sqrt(x**2 + y**2) < r_min r_min对应的x,y值,以便删除那些大箭头,或者增加网格的间距,使这些大箭头有一些空间呼吸

  2. x<0的错误箭头指示是由于您使用arctan而不是arctan2 specifically designed for use in 4 quadrants(从+ x轴测量)。< / p>

  3. 确实有3D quiver。要开始使用它,您可以执行

  4. from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as plt
    
    X, Y, Z = #3D meshgrid of positions
    U, V, W = #3D meshgrid of directions
    
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    ax.quiver(X, Y, Z, U, V, W, **kwargs)