Matplotlib中的Natgrid插值产生Null值

时间:2012-06-29 21:38:19

标签: python null matplotlib interpolation

每个人,

我目前在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。这将保持准确性而不会破坏插值方法。

感谢您的帮助,

丹尼尔

0 个答案:

没有答案