Следующий код представляет собой упрощенную версию того, что у меня возникли проблемы с:Невозможно использовать линейную интерполяцию с функцией Matplotlib GridData
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 = 'линейный'».. – George
какая версия Matplotlib вы используете? – cattt84
Привет, это 1.4.0 – George