我目前有一个大约100x120的2d numpy矩阵。索引是指“坐标”,矩阵中的值是“高度”,我正在尝试使用pcolor绘制此数据,类似于此处显示的“二维样条线表示”:
http://docs.scipy.org/doc/scipy-0.7.x/reference/tutorial/interpolate.html
我的问题是,尽管我所有的“坐标”和“高度”都是整数,但坐标不是均匀的空格。例如,仅特定的行包含数据(不相等的间距),并且包含数据的每一行的每个其他条目将仅具有“高度”值(每行包含数据的间距相同)。我的意思的一个简单示例如下:
[[nan, 3, nan, 1, nan, 2],
[nan, nan, nan, nan, nan, nan],
[nan, 5, nan, 2, nan, 3],
[nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan],
[nan, 4, nan, 1, nan, 2]]
我一直在尝试遵循我链接到的插值/ pcolor示例,但未成功。我的目标是在所有数据上绘制出连续的漂亮pcolor类型图,在数据点之间进行插值以填充这些nan。
我会很感激您能提供的任何帮助。
最佳答案
有什么问题?您只需要使用值提取单元格的索引,然后将这些索引传递给具有“ height”值的插值函数。下面是一些执行此操作的代码。
import numpy as np
from numpy import nan
from scipy import interpolate
import matplotlib.pyplot as plt
a = np.array([[nan, 3, nan, 1, nan, 2],
[nan, nan, nan, nan, nan, nan],
[nan, 5, nan, 2, nan, 3],
[nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan, nan],
[nan, 4, nan, 1, nan, 2]])
x, y = np.where(np.isfinite(a))
z = a[x,y]
xnew,ynew = np.mgrid[0:6:70j,0:6:70j]
tck = interpolate.bisplrep(x,y,z,s=0, kx=1, ky=1)
znew = interpolate.bisplev(xnew[:,0],ynew[0,:],tck)
plt.figure()
plt.pcolor(xnew,ynew,znew)
plt.colorbar()
plt.title("Interpolated function.")
plt.show()
结果将如下所示:
请注意,这与矩阵的确切方向不匹配。为此,您必须将绘图的原点更改为左上角,并可能转置数据。我将其留给您练习。
另外,获取非na值的索引的方法有些粗糙,因此也许其他人可以对此发表评论(感谢seberg的提示)。
关于python - Python-插值/pcolor不均匀间隔的numpy矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13032819/