【问题标题】:Cannot use linear interpolation with matplotlib griddata function不能将线性插值与 matplotlib griddata 函数一起使用
【发布时间】:2015-03-23 11:31:40
【问题描述】:

以下代码是我遇到的问题的简化版本:

import matplotlib.pyplot as plt
from matplotlib.mlab import griddata
import numpy as np

def grid(x, y, z, resX=100, resY=100):
    xi = np.linspace(np.min(x), np.max(x), resX)
    yi = np.linspace(np.min(y), np.max(y), resY)
    #Z    = griddata(x, y, z, xi, yi)
    Z    = griddata(x, y, z, xi, yi, interp='linear')
    X, Y = np.meshgrid(xi, yi)
    return X, Y, Z

data = np.random.randint(200,size = (40,20))

X = np.arange(40)
Y = np.arange(20)

x, y = np.meshgrid(X, Y)
z = np.array(data)

X, Y, Z = grid(x.ravel(), y.ravel(), z.ravel(), resX=50, resY=50)

plt.figure()
plt.subplot(1,2,1)
plt.imshow(data)
plt.subplot(1,2,2)
plt.imshow(Z)
plt.show()

只要我使用注释行

Z = griddata(x, y, z, xi, yi)

而不是

Z = griddata(x, y, z, xi, yi, interp='linear')

一切正常。一旦我使用线性插值启动代码,我就会得到一个

raise ValueError("output grid must have constant spacing"
ValueError: output grid must have constant spacing when using interp='linear'

那 np.linspace() 怎么可能不会产生恒定的间距,或者我错过了什么? (显然,我的真实数据比示例中使用的要复杂得多,而且间隔不相等,因此确实需要使用 griddata!)

【问题讨论】:

  • :代码运行良好 gruddata , interp='linear''..
  • 你使用的是哪个版本的matplotlib?
  • 我使用的是 numpy 1.8.2 和 matplotlib 1.3.1。然而几分钟前,我遇到了这个古老而相同的问题stackoverflow.com/questions/12338649/mlab-griddata-bug。看来他也遇到了同样的问题,最后也没能解决(而是改用scipy.griddata)。
  • :嗯,试试看是否有效。

标签: python matplotlib interpolation


【解决方案1】:

升级到 matplotlib 1.4.3 和 numpy 1.9.2 成功了。现在线性插值工作正常,但原来使用的自然邻居不再工作了

raise RuntimeError("To use interp='nn' (Natural Neighbor "
RuntimeError: To use interp='nn' (Natural Neighbor interpolation) in griddata, natgrid must be installed.  Either install it from http://sourceforge.net/projects/matplotlib/files/matplotlib-toolkits, or use interp='linear' instead.

我通过

升级(Ubuntu 14.04)
# Install libfreetype6-dev
sudo apt-get install libfreetype6-dev

# Upgrade to matplotlib 1.4 using PIP
sudo pip install --upgrade matplotlib

手动安装 natgrid (http://sourceforge.net/projects/matplotlib/files/matplotlib-toolkits/) 后我的所有问题似乎都解决了!

@乔治:谢谢

【讨论】:

    猜你喜欢
    • 2012-03-28
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 2022-08-06
    相关资源
    最近更新 更多