2015-05-20 46 views
1

我想用matplotlib繪製一個矢量字段,但它不能正確繪製,我無法弄清楚我做錯了什麼。用matplotlib無法正確顯示矢量字段

要繪製的矢量場是固定高度處的無限長直線的磁場。我應該得到的是這樣的:

enter image description here

我知道,對於矢量場(在圓柱座標)的計算公式如下:

B(R)=(U0/2 * PI)*( I/R)

其中: U0是一個恆定(正), i是在導線的電流, r是從電線(z軸)的距離。

下面是圖片,我得到使用下面的代碼: enter image description here 正如你所看到的,除了與線的中心問題,在左半向量指向錯誤的方向。 另外,是否有一個功能,繪製在3D領域?如matlab中的顫動3? 由於

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() 
+0

反三角函數功能[只在特定的時間間隔定義(http://mathworld.wolfram.com/InverseTrigonometricFunctions.html)。指向錯誤方向的箭頭不是繪圖錯誤,而是計算'ex,ey'時的疏忽。 **劇透:你想使用'np.arctan2' **。 – wflynny

+0

我犯了多麼愚蠢的錯誤!感謝您的幫助! – mickkk

回答

3
  1. 在芯的長箭頭是由於磁場吹起來非常接近電線。刪除/屏蔽網格中對應於r=sqrt(x**2 + y**2) < r_min的某些r_min的x,y值,以便刪除那些大箭頭或增加網格的間距,以便這些大箭頭有一定的呼吸空間。

  2. x<0錯誤的箭頭方向是由於你使用arctan代替arctan2specifically designed for use in 4 quadrants至(從+ X軸測量)。

  3. 確實有一個3D quiver。要開始使用,你可以做


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)