2015-03-23 3 views
0

Следующий код представляет собой упрощенную версию того, что у меня возникли проблемы с:Невозможно использовать линейную интерполяцию с функцией 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!)

+0

: Код прекрасно работает с gruddata, Interp = 'линейный'».. – George

+0

какая версия Matplotlib вы используете? – cattt84

+0

Привет, это 1.4.0 – George

ответ

0

Обновление до 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/) все мои проблемы кажется, решены!

@George: БЛАГОДАРЯ

+0

: Приятно, что сработало :) – George

Смежные вопросы