Python Basemap 立体投影地图
我想在一个立体投影的地图上显示一些数值(这里是南极的地图,叫spstere)。如果我在一个圆柱形的地图上显示这些数值(叫cyl),一切都很正常:
m = Basemap(projection='cyl',llcrnrlon=-180,llcrnrlat=-90,urcrnrlon=180,urcrnrlat=90,resolution='i')
CS = m.scatter(lon2,lat2,c=BT2,edgecolors='none',s=sz,cmap='gray')
现在我想在南极的立体投影地图上显示相同的数值,但我就是搞不定:
m = Basemap(projection='spstere',boundinglat=-10,lon_0=180,resolution='c')
CS = m.scatter(lon2,lat2,c=BT2,edgecolors='none',s=sz,cmap='gray')
无论我怎么做,我只看到大陆的轮廓,但没有任何数据。
3 个回答
0
只需要添加latlon这个关键词
m = Basemap(projection='spstere',boundinglat=-10,lon_0=180,resolution='c')
CS = m.scatter(lon2,lat2,c=BT2,s=sz,cmap='gray', latlon=True)
来自文档:
如果将latlon关键词设置为True,那么x和y就会被理解为经度和纬度,单位是度。数据和经度会自动调整,以适应圆柱形和伪圆柱形地图的投影区域,同时x和y会转换为地图投影坐标。如果latlon设置为False(默认值),那么x和y就会被认为是地图投影坐标。
1
看起来你已经明白了,你需要把你的x和y坐标转换成“地图”坐标(相关的文档可以在这里找到:http://matplotlib.github.com/basemap/users/mapcoords.html):
spstereo = Basemap(projection='spstere',boundinglat=-10,lon_0=180,resolution='c')
x, y = spstereo(lons, lats)
spstereo.scatter(x, y)
3
我想我自己找到了答案。你需要做的是把经纬度坐标从圆柱投影转换成属于立体投影的x/y坐标。这其实很简单,首先像这样定义Basemap:
m = Basemap(projection='spstere',boundinglat=-10,lon_0=180,resolution='c')
然后就可以这样进行转换:
x,y = m(lon2,lat2)
最后用x/y坐标来绘制地图,比如:
CS = m.scatter(x,y,c=BT2,edgecolors='none',s=sz,cmap='gray')
这样对我来说是有效的 :)