【发布时间】:2014-02-17 11:19:45
【问题描述】:
我正在尝试使用 numpy、matplotlib plyplot 和 scipy 在 python 中绘制具有不均匀数据的轮廓。
给定以下代码 sn-p,为什么 zi 要么是空的,要么都是相同的值?
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata
lon_min = 1.8783669
lon_max = 1.8792678
lat_min = 57.45827
lat_max = 57.459293
x = [ 520.99012099,652.23665224,800.,0.,520.99012099
652.23665224,800.,0.,520.99012099,652.23665224 ...]
y = [ 0.,379.47214076,437.53665689,600.,0.
379.47214076,437.53665689,600.,0.,379.47214076 ...]
z = [ 56.6,56.6,56.6,56.6,45.3,45.3,45.3,45.3,57.8,57.8 ...]
xi = np.linspace(lon_min,lon_max,10)
yi = np.linspace(lat_min,lat_max,10)
zi = griddata((x, y), z, (xi[None,:], yi[:,None]), method='nearest')
plt.contour(xi,yi,zi,15,linewidths=0.5,colors='k') # this is blank or all the same colour because zi is either nan or all the same number depending on the method I use.
应用一点调试,如果我使用 method=cubic/linear,zi 看起来要么是 NAN,要么如果我使用 method=nearest,则都是相同的数字
print xi
print yi
print zi
给出: xi = [ 1.8783669 1.878376 1.8783851 1.8783942 1.8784033 1.8784124 1.8784215 1.8784306 1.8784397 1.8784488 1.8784579 1.878467 1.8784761 1.8784852 1.8784943 1.8785034 1.8785125 ....]
yi = [57.45827 57.45828033 57.45829067 57.458301 57.45831133
57.45832167 57.458332 57.45834233 57.45835267 57.458363
57.45837333 57.45838367 57.458394 57.45840433 57.45841467
57.458425 57.45843533 57.45844567 57.458456 57.45846633 .... ]
zi = [[ nan nan nan ..., nan nan nan]
[ nan nan nan ..., nan nan nan]
[ nan nan nan ..., nan nan nan]
...,
[ nan nan nan ..., nan nan nan]
[ nan nan nan ..., nan nan nan]
[ nan nan nan ..., nan nan nan]]
zi = [[ 46.7 46.7 46.7 ..., 46.7 46.7 46.7]
[ 46.7 46.7 46.7 ..., 46.7 46.7 46.7]
[ 46.7 46.7 46.7 ..., 46.7 46.7 46.7]
...,
[ 46.7 46.7 46.7 ..., 46.7 46.7 46.7]
[ 46.7 46.7 46.7 ..., 46.7 46.7 46.7]
[ 46.7 46.7 46.7 ..., 46.7 46.7 46.7]]
【问题讨论】:
-
你能把它变成真正的 Python 代码吗?处理几乎不可运行的代码是非常烦人的。有关正确输出数组的帮助,请参阅this。人们更有可能以这种方式回答问题。
-
griddata 调用对
scipy.interpolate.griddata也无效 -
从文档看来,您似乎没有向 griddata 传递正确的值 docs.scipy.org/doc/scipy/reference/generated/… griddata(points, values, xi, method='linear', fill_value=nan) 您将 5 个值传递给griddata,你知道你认为你传递了哪些值
-
更新:将 scipy 和 numpy 更新到较新版本后,我现在得到所有相同的值(如果我使用 method=nearest)或 nan 如果我使用 method=cubic/linear - 知道为什么吗? print zi (最近) [[ 46.7 46.7 46.7 ..., 46.7 46.7 46.7] [ 46.7 46.7 46.7 ..., 46.7 46.7 46.7] [ 46.7 46.7 46.7 ..., 46.7 46.7 46.7] ..., [ 46.7 46.7 46 ..., 46.7 46.7 46.7] [ 46.7 46.7 46.7 ..., 46.7 46.7 46.7] [ 46.7 46.7 46.7 ..., 46.7 46.7 46.7]] print zi (cubic) [[ nan nan nan ..., nan nan nan ] ..., [楠楠楠 ..., 楠楠楠]]
-
@SamMaj 这有没有得到解决。谢谢!
标签: python numpy matplotlib scipy