用pylab用微分方程组的解绘制等高线图



所以,我正在用数值方法求解一个微分方程组,我有x,y,z的解。每个数组都是一维的,例如x[0]、y[0]、z[0]与空间中的一个点相连。我想把这些画在一个轮廓上,就像通常的x,y,z坐标一样,它说我需要z是一个2d数组,我知道如何从x和y生成网格,但我该如何对z进行处理?我用x,y做了一个网格,但对于z,我不知道该怎么办。

如果有人能给我真知灼见,我将不胜感激。

仅仅在x和y中网格是不够的,您需要在常规网格上网格化数据才能绘制等高线。为此,您应该查看matplotlib.mlab.griddata(http://matplotlib.org/examples/pylab_examples/griddata_demo.html)。

我将粘贴下面链接中的示例代码,并附上一些额外的注释:

from numpy.random import uniform, seed
from matplotlib.mlab import griddata
import matplotlib.pyplot as plt
import numpy as np
# Here the code generates some x and y coordinates and some corresponding z values.
seed(0)
npts = 200
x = uniform(-2,2,npts)
y = uniform(-2,2,npts)
z = x*np.exp(-x**2-y**2)
# Here you define a grid (of arbitrary dimensions, but equal spacing) onto which your data will be mapped
xi = np.linspace(-2.1,2.1,100)
yi = np.linspace(-2.1,2.1,200)
# Map the data to the grid to get a 2D array of remapped z values
zi = griddata(x,y,z,xi,yi,interp='linear')
# contour the gridded data, plotting dots at the nonuniform data points.
CS = plt.contour(xi,yi,zi,15,linewidths=0.5,colors='k')
CS = plt.contourf(xi,yi,zi,15,cmap=plt.cm.rainbow,
                  vmax=abs(zi).max(), vmin=-abs(zi).max())
plt.colorbar() # draw colorbar
# Plot the original sampling
plt.scatter(x,y,marker='o',c='b',s=5,zorder=10)
plt.xlim(-2,2)
plt.ylim(-2,2)
plt.title('griddata test (%d points)' % npts)
plt.show()

看起来像是在寻找折线图或散点图,而不是等高线。

最新更新