每个人,
我目前在matplotlib中griddata产生的插值方面遇到了一些困难。我有一个数据集,每个数据点包含3个值。我试图在轮廓中绘制这些数据。我遇到的问题是内置的delauny插值会破坏某些数据集。所以,我试图转移到natgrid interpolatoin。这适用于某些数据。但是,其他数据集会在griddata的输出中生成一些空值。我还应该提到这些空值出现在大多数值相同的区域(在这种情况下为0)。
是否有任何可能导致此问题的建议?
编辑:这里有更多细节。
源数据相当大,无法粘贴到此处。所以,我用一个pastebin来装它。我希望这是允许的。这可以在这里找到:http://pastebin.com/C7Nvvcaw。格式为x,y,z。所以第一列是x值,依此类推。这是打印xyz列表中的每个项目并将其输送到文件中的结果。
这同样适用于后插值数据。所以,我也使用过pastebin。这是:http://pastebin.com/ZB6S2qFk。每个[]对应一个特定的y值。不包括y值,因为它们位于单独的列表中。但是,它们的Y轴范围为0-50,X轴为0-100。这是从我的代码打印zi列表中的每个项目并将其输送到文件中的输出。
现在对于代码,我没有附加所有代码,因为它的很大一部分超出了这个问题的范围。所以,我会发布相关的组件。初始数据位于列表列表中,提供了以三维方式导航数据的功能。我想这类似于一个三维数组,虽然它不是,只是一个列表列表。源数据的列表称为xyz。
#Function to get individual column of data
def column(matrix, i):
return [row[i] for row in matrix]
#Getting Max and Mins
xmin = float(min(column(xyz, 0)))
xmax = float(max(column(xyz, 0)))
ymin = float(min(column(xyz, 1)))
ymax = float(max(column(xyz, 1)))
#Resolution for interpolation (x and y list lengths)
resx = 100
resy = 50
xi = np.linspace(xmin, xmax, resx)
yi = np.linspace(ymin, ymax, resy)
x = np.array(column(xyz, 0))
y = np.array(column(xyz, 1))
z = np.array(column(xyz, 2))
zi = griddata(x, y, z, xi, yi, interp='nn')
编辑:我找到了解决方案。 0值打破了插值。我能够捕获它们并将它们全部更改为0.1,插值不再产生空值。这在我的情况下是可以接受的,因为0和0.1属于相同的轮廓颜色。对于其他用户,如果您需要保持数据的绝对精度,我建议将所有值转换为+1,插值,然后转换插值-1。这将保持准确性而不会破坏插值方法。
感谢您的帮助,
丹尼尔