我试图用matplotlib绘制一个矢量场,但它没有正确绘制,我无法弄清楚我做错了什么。
要绘制的矢量场是固定高度的无限长直线的磁场。我应该得到的是:
我知道矢量场的方程(在圆柱坐标系中)是:
B(r)=(u0 / 2 * pi)*(i / r)
其中: u0是一个常数(正), 我是电线中的电流, r是线的距离(z轴)。
以下是使用以下代码获得的图片: 如您所见,除了导线中心的问题外,左半部分的矢量指向错误的方向。 此外,是否有功能在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()
答案 0 :(得分:3)
核心处的长箭头是由于磁场非常靠近电线而爆炸。删除/屏蔽网格中与某些r=sqrt(x**2 + y**2) < r_min
r_min
对应的x,y值,以便删除那些大箭头,或者增加网格的间距,使这些大箭头有一些空间呼吸
x<0
的错误箭头指示是由于您使用arctan
而不是arctan2
specifically designed for use in 4 quadrants(从+ x轴测量)。< / p>
确实有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)