16. SciPy二元样条插值
之前的章节的插值基本上都是一个变量x,本章就二元(二维)的插值问题进行展开。
在SciPy模块库的scipy.interpolate子模块里提供了interp2d方法函数可以实现二维插值。
16.1 绘制二元可视化数据
Python里可视化输出的模块很多,但比较常用的是matplotlib模块来实现数据的可视化的输出。在matplotlib模块里的子模块pyplot里提供很多的类似matlib的一些绘制函数,本章、本网并没有意愿详述matplotlib模块库,有意学习pyplot的可以访问其官方网站系统学习。
1). 用matplotlib绘制二维可视化数据首先要引入相应的模块库。
import numpy as np, matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
这里还引入了mpl_toolkits.mplot3d.axes3d模块,目前是支持三维显示。
2). 接下来可以定义一个二元的$f(x, y)$函数。
def f(x,y):
return np.sin(x) + np.sin(y)
3). 定义网格数据:
t = np.linspace(-3, 3, 100)
domain = np.meshgrid(t, t)
有关meshgrid函数可以参考本站的NumPy部分的meshgird函数内容。domain变量是一个列表,里面有两个numpy的array。再将网格数据提取出来作为X和Y。在将X和Y代入$f(x, y)$函数得到Z值。
X, Y = domain
Z = f(*domain)
4). 绘制$f(x, y)$,这里使用了subplot2grid函数。
fig = plt.figure()
ax1 = plt.subplot2grid((2,2), (0,0), aspect='equal')
p = ax1.pcolor(X, Y, Z)
fig.colorbar(p)
CP = ax1.contour(X, Y, Z, colors='k')
ax1.clabel(CP)
ax1.set_title('Contour plot')
语句subplot2grid((