我试图将潜在值绘制为x和y的函数,并使用此函数将电场绘制为矢量场。我没有成功绘制矢量字段,因为为了使用numpy.gradient
,我需要知道我的数据函数,或者以其他形式获取我的数据。目前我的数据格式为:
x = [3,3,3...9]
y = [1,2,3...9]
# v is potential as a function of the corresponding x and y values.
v = [0.436744, 0.411724...3.626803]
到目前为止,我的代码只是从文件中提取数据,然后使用matplotlib绘制轮廓和轮廓图,如下所示。
import numpy as np
from matplotlib import cm
import matplotlib.pyplot as plt
contours=plt.tricontour(x, y, v, colors='k',linewidths=2,linestyles='solid')
plt.tricontourf(x, y, v, cmap=cm.hsv)
plt.clabel(contours, inline=1, fontsize=14)
plt.colorbar()
plt.show()
似乎我应该使用np.gradient
加上plt.quiver(x, y, E)
,其中E是电场 - 使用E=-Grad(V)
的事实。
以下是我当前输出的示例: 我试图让它看起来像这样: 请注意叠加的矢量场。 这里使用了以下代码:
# Contour plot for regular grid
dx = 0.1
dy = 0.1
xr = np.arange(-1, 1, dx)
yr = np.arange(-1, 1, dy)
# Create grid corresponding to xr and yr arrays
xx, yy = np.meshgrid (xr, yr, indexing = 'ij')
zz = xx + yy*yy
gradx, grady = np.gradient (zz, dx, dy)
n = 20
#l = np.array([0.0, 0.5, 1.0, 1.5, 2.0])
plt.contourf(xx, yy, zz, n)
plt.contour(xx, yy, zz, levels = l, colors = 'k', linewidths = 1, linestyles = 'solid')
plt.quiver(xx, yy, gradx , grady)
plt.show()
这两种情况的不同之处在于,在我的情况下,我没有一个已知的函数可以用来计算标量场的梯度。在后一种情况下,函数是已知的,因此可以计算梯度。由于这种差异,我不确定如何从这里开始。
提前感谢您提供的任何指导和帮助。