Matplotlib中产生空值的Natgrid插值

2024-03-28 15:35:58 发布

您现在位置:Python中文网/ 问答频道 /正文

所有人

我目前对matplotlib中griddata生成的插值有一些困难。我有一个数据集,每个数据点包含3个值。我试着把这些数据画成等高线。我遇到的问题是内置的delauny插值在某些数据集上中断。所以,我试着转到natgrid插值。这对某些数据有效。但是,其他数据集在griddata的输出中会产生一些空值。我还应该提到,这些空值出现在大多数值相同的区域(本例中为0)。在

有什么建议可以导致这种情况?在

编辑:这里有更多的细节。在

源数据相当大,无法粘贴到此处。所以,我用一个纸篓来装它。我希望这是允许的。这里有:http://pastebin.com/C7Nvvcaw。它的格式类似于x,y,z。所以第一列是x值,依此类推。这是打印xyz列表中的每一项并将其传送到文件中的结果。在

这同样适用于后插值数据。所以,我也用过纸篓。在这里: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。这将在不破坏插值方法的情况下保持精度。在

谢谢你的帮助

丹尼尔


Tags: 数据代码编辑列表np情况columnfloat