import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d
from mpl_toolkits import mplot3d
from scipy.interpolate import griddata
x=np.array([129,140,103.5,88,185.5,195,105,157.5,107.5,77,81,162,162,117.5])
y=np.array([7.5,141.5,23,147,22.5,137.5,85.5,-6.5,-81,3,56.5,-66.5,84,-33.5])
z=-np.array([4,8,6,8,6,8,8,9,9,8,8,9,4,9])
xy=np.vstack([x,y]).T
xn=np.linspace(x.min(),x.max(),100)
yn=np.linspace(y.min(),y.max(),100)
xng,yng=np.meshgrid(xn,yn)
#基于最近邻插值方法,在 (xng, yng) 网格上计算 z 的插值结果。
zn=griddata(xy,z,(xng,yng),method='nearest')
plt.rc('font',size=16)
ax=plt.subplot(131,projection='3d')
ax.plot_surface(xng,yng,zn,cmap='viridis')
ax.set_xlabel('$x$')
ax.set_ylabel('$y$')
ax.set_zlabel('$z$')
plt.subplot(133)
#c = plt.contour(xn, yn, zn, 8) 的作用是使用 xn 和 yn 网格以及对应的插值结果 zn 绘制等高线图。参数 8 表示要绘制的等高线数量。
c=plt.contour(xn,yn,zn,8)
#plt.clabel(c) 的作用是在等高线图 c 上添加数值标签。
plt.clabel(c)
plt.show()
最后的效果图: