我有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()
你的问题是你的插值网格不够好,因为你是相当放大海岸线的复杂性。另外,你正在使用一个不同的分辨率为您的海洋为您的底图,这会导致一些奇怪的文物。所以我对你的代码做了3个修改:
不要使用
map
作为变量名-它是一个内置的Python函数,不应该被重写。你知道吗m = Basemap(...
提高插值栅格的分辨率
xi, yi = np.linspace(21,24, 1000), np.linspace(36, 39, 1000)
将马斯克海人的分辨率与底图匹配
zm=maskoceans(xi,yi,zi,resolution='i',grid=1.25)
相关问题 更多 >
编程相关推荐