我一直是Mathematica的长期用户,而且我一直在将各种笔记本电脑转换成python(版本3)。为了绘图,我一直在使用matplotlib。我遇到了障碍,我不确定出了什么问题。
我试图转换以下Mathematica代码:
(* simple electric dipole *)
Ex[x_, y_] := (x + 1)/((x + 1)^2 + y^2) - (x - 1)/((x - 1)^2 + y^2)
Ey[x_, y_] := y/((x + 1)^2 + y^2) - y/((x - 1)^2 + y^2)
StreamPlot[{Ex[x, y], Ey[x, y]}, {x, -3.5, 3.5}, {y, -3.5, 3.5}]
这产生了下图:
我想使用Python代码重现这一点。
from pylab import *
X,Y = meshgrid( arange(-4,4,.2),arange(-4,4,.2) )
Ex = (X + 1)/((X+1)**2 + Y**2) - (X - 1)/((X-1)**2 + Y**2)
Ey = Y/((X+1)**2 + Y**2) - Y/((X-1)**2 + Y**2)
figure()
Q = quiver( Ex, Ey)
l,r,b,t = axis()
dx, dy = r-l, t-b
axis([l-0.05*dx, r+0.05*dx, b-0.05*dy, t+0.05*dy])
show()
产生下图:
我还在学习如何在python中进行绘图,而且我对如何创建矢量场图有点不确定。任何见解都将不胜感激。
答案 0 :(得分:0)
这个问题是你在场上的节点强度非常高,因此箭头很难缩放。如果我们使用参数scale=50
来扩展箭头,我们得到的情节是:
但是,如果我们在pyplot中也使用streamplot函数,我们可以得到以下结果:
如果你问我一个更好的情节。
以下是供参考的代码。
import numpy as np
import matplotlib.pyplot as plt
#%% Plot the fields
X,Y = np.meshgrid( np.arange(-4,4,.2), np.arange(-4,4,.2) )
Ex = (X + 1)/((X+1)**2 + Y**2) - (X - 1)/((X-1)**2 + Y**2)
Ey = Y/((X+1)**2 + Y**2) - Y/((X-1)**2 + Y**2)
plt.figure()
plt.streamplot(X,Y,Ex,Ey)
plt.title('streamplot')
plt.figure()
plt.quiver(X,Y,Ex,Ey,scale=50)
plt.title('quiver')