用pylab实现微分方程组解的等高线图

时间:2014-04-14 02:54:33

标签: python matplotlib

所以,我用数字方法求解微分方程组,我有x,y,z每个解决方案。每个数组都是一维的,例如x [0],y [0],z [0]与空间中的一个点一致。我想要像通常的x y z坐标一样绘制这些图形,它说我需要z是一个二维数组,我知道如何从x和y制作一个网格,但我该怎么做到z? 我用x,y制作了一个网格,但是对于z我不知道该怎么做。

如果有人能给我一些见解,那将非常感激。

2 个答案:

答案 0 :(得分:1)

仅仅在x和y中进行网格划分是不够的,您需要在常规网格上对数据进行网格化以便能够绘制等高线图。为此,您应该查看matplotlib.mlab.griddatahttp://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()

答案 1 :(得分:0)

看起来您正在寻找linescatter图而不是轮廓。