我有3个列表x,y,z包含long,lat,value。我正在尝试使用contourf和maskoceans构建一个图。我在海岸线附近得到的结果并不是很好。尝试增加linspace的参数会导致内存错误。有没有办法在靠近海岸线的地方取得更好的成绩? 我的代码如下:
import numpy as np
import scipy.interpolate
from mpl_toolkits.basemap import Basemap,maskoceans
import matplotlib.pyplot as plt
x=[23.027008, 22.774524, 23.010211, 22.346053, 21.264416, 21.261967, 21.31769, 21.478437, 21.406678, 21.453064]
y=[36.547227, 36.824754, 37.482874, 37.61182, 37.873769, 37.935473, 37.978032, 38.139038, 38.162707, 38.168772]
z=[155.15, 354.86, 400.2, 47.16, 188.44, 277.01, 375.12, 87.71, 133.85, 123.56]
map =Basemap(projection='mill',
llcrnrlat=36.928942,llcrnrlon=21.696255,
urcrnrlat=38.03002,urcrnrlon=23.497298,
resolution='i')
map.drawcoastlines()
xi, yi = np.linspace(21,24, 100), np.linspace(36, 39, 100)
xi, yi = np.meshgrid(xi, yi)
xm,ym=map(xi,yi)
rbf = scipy.interpolate.Rbf(x, y, z, function='linear')
zi = rbf(xi, yi)
zm=maskoceans(xi,yi,zi,resolution='h',grid=1.25)
map.contourf(xm, ym, zm,cmap='jet')
map.colorbar()
plt.show()
答案 0 :(得分:1)
你遇到的问题是你的插值网格对于海岸线的复杂性来说还不够好,因为你已经放大了。另外你使用不同的海洋分辨率和你的底图会产生一些奇怪的瑕疵。所以我对你的代码进行了3次更改:
不要使用pi
作为变量名 - 它是一个内置的Python函数,不应该被覆盖。
map
提高插值网格的分辨率
m = Basemap(...
将蒙面扫描的分辨率与底图匹配
xi, yi = np.linspace(21,24, 1000), np.linspace(36, 39, 1000)