我收到了一个非常有用且有用的解决方案来解决我的轮廓不规则数据问题Contours with map overlay on irregular grid in python,这里我仍然存在将轮廓与底图组合的问题。为此,我知道我必须这样做:
x,y = m(lon,lat)
。
我见过的SO帖子都没有符合我的需求。我的问题是我从哪里得到x,y
lon, lat
在上面公式中使用的m = Basemap(projection = 'merc',llcrnrlon = 21, llcrnrlat = -18, urcrnrlon = 34, urcrnrlat = -8, resolution='h')
?
这是我的地图对象:
data = pd.read_csv('meansr.txt', delim_whitespace=True)
numcols, numrows = 300, 300
xi = np.linspace(data.Lon.min(), data.Lon.max(), numcols)
yi = np.linspace(data.Lat.min(), data.Lat.max(), numrows)
xi, yi = np.meshgrid(xi, yi)
x, y, z = data.Lon.values, data.Lat.values, data.Z.values
zi = griddata(x, y, z, xi, yi)
以下是轮廓和网格化的数据:
plt.figure()
plt.contourf(xi, yi, zi)
plt.scatter(data.Lon, data.Lat, c=data.Z, s=100,
vmin=zi.min(), vmax=zi.max())
plt.colorbar()
plt.show()
以下是绘图命令
x, y
这给了我两个图,一个底图和轮廓并排,我认为这是由于两个坐标的不同。指向轮廓内部表示正确的纬度和经度,而在地图上显示的{{1}}非常大,为2000及以上。 请帮忙。
答案 0 :(得分:1)
稍微更改了我的回复,以便我在回复您更改的问题版本时输入的内容:https://stackoverflow.com/a/20950887/2393569使用与您在此处提供的代码相同的名称/ ...:
data = pd.read_csv('meansr.txt', delim_whitespace=True)
numcols, numrows = 30, 30
xi = np.linspace(data.Lon.min(), data.Lon.max(), numrows)
yi = np.linspace(data.Lat.min(), data.Lat.max(), numcols)
xi, yi = np.meshgrid(xi, yi)
x, y, z = data.Lon, data.Lat, data.Z
# NOTE: from here on it changes
points = np.vstack((x,y)).T
values = z
wanted = (xi, yi)
zi = griddata(points, values, wanted) # for more info on griddata: http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html
# from here its the same code again as you had
plt.figure()
plt.contourf(xi, yi, zi)
plt.scatter(data.Lon, data.Lat, c=data.Z, s=100, vmin=zi.min(), vmax=zi.max())
plt.colorbar()
plt.show()
所以你实际遇到的问题并不是完全理解scipy.interpolate.griddata
,而是与matplotlib有关的问题。
所以正确使用
scipy.interpolate.griddata(points, values, xi, method='linear', fill_value=nan)
# 'points' has to contain what you named x and y
# 'values' has to contain what you named z
# 'xi' has to contain what you named xi,yi
更改后,绘图是否仍会给您带来麻烦?
注意:我假设您的导入是:
import numpy as np
from scipy.interpolate import griddata
import pylab as plt
# i guess the pd.read_csv is something pandas (heard of it, but never used it before, but since the only thing you do is read_csv i guess that wont cause problems)
如果您在此处提出问题,最好也提供您的导入,因为我发现from matplotlib.mlab import griddata
也存在,并且语法与您使用的类似,在Contours with map overlay on irregular grid in python您使用来自scipy的griddata,但你似乎根据你的后续问题(这个)的答案包含了griddata的matplotlib.mlab导入(其工作方式不同)。这会解决你的困惑吗?