我试图在python中对数据进行网格化后使用不规则数据生成等高线图。当我试图得到一个像右侧的轮廓图而我的图中没有任何空白区域(未开槽的空间?)时,我得到的东西就像左边的图像一样
我最初使用下面的代码创建一个网格
def grid(x, y, z, resX=100, resY=100):
xi = linspace(min(x), max(x), resX)
yi = linspace(min(y), max(y), resY)
Z = griddata(x, y, z, xi, yi, interp='linear')
X, Y = meshgrid(xi, yi)
return X, Y, Z
X, Y, Z = grid(x, y, z)
contour = plt.contourf(X,Y,Z)
其中x,y,z是我的csv文件中的列。
我尝试使用其他方法,如使用matplotlib.pyplot.tricontourf
,但情节看起来类似于我得到的。
来自scipy.interpolate.rbf
的Rbf给出了一个类似于右侧的图,如果我使用我的数据子集但它不适用于大型数据集。
您需要推断以覆盖空白区域。 Griddata在数据的凸包内插值。为了推断数据,您可以使用SciPy的RBF(径向基函数)插值。 RBF有一些插值选项(线性,立方,高斯等)。另一种选择是使用sklearn的“高斯过程回归”来预测整个网格空间中的值。此选项需要SciPy内置RBF的更多工作,但它也更灵活。