我认为这是你正在寻找(大致).请注意,在绘制pcolor并传入hsv色彩映射(Docs:
cmap parameter for pcolormesh和
available colormaps)之前,关键的是屏蔽数据数组.
我已经保留代码来绘制地图,非常接近实例,所以应该很容易遵循.同样的原因我保留了插值代码.请注意,插值是线性的,而不是立方体 – kx = ky = 1 – 因为您没有给出足够的点来进行立体插值(您需要至少16个 – scipy会抱怨较少说“m必须是> =(kx 1)(ky 1)“,尽管在documentation中没有提到约束).
我也扩展了meshgrid的范围,并保持在x / y的范围内.
码
from mpl_toolkits.basemap import Basemap,maskoceans
import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate
# set up orthographic map projection with
# perspective of satellite looking down at 0N, 20W (Africa in main focus)
# use low resolution coastlines.
map = Basemap(projection='ortho',lat_0=0,lon_0=20,resolution='l')
# draw coastlines, country boundaries
map.drawcoastlines(linewidth=0.25)
map.drawcountries(linewidth=0.25)
# Optionally (commented line below) give the map a fill colour - e.g. a blue sea
#map.drawmapboundary(fill_color='aqua')
# draw lat/lon grid lines every 30 degrees.
map.drawmeridians(np.arange(0,360,30))
map.drawparallels(np.arange(-90,90,30))
data = {'Lagos': (6.453056, 3.395833,0),
'Cairo': (30.05, 31.233333,90),
'Johannesburg': (-26.204444, 28.045556,180),
'Mogadishu': (2.033333, 45.35, 270)}
x,y,z = zip(*data.values())
xnew, ynew = np.mgrid[-30:60:0.1, -50:50:0.1]
tck = interpolate.bisplrep(x, y, z, s=0,kx=1,ky=1)
znew = interpolate.bisplev(xnew[:,0], ynew[0,:], tck)
znew = maskoceans(xnew, ynew, znew)
col_plot = map.pcolormesh(xnew, ynew, znew, latlon=True, cmap='hsv')
plt.show()
产量