Python底图立体图

时间:2011-10-25 13:16:24

标签: python matplotlib matplotlib-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 :(得分: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')

这对我有用:)

答案 1 :(得分: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)

答案 2 :(得分: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)

来自documentation

  

如果latlon关键字设置为True,则x,y以度为单位表示为经度和纬度。数据和经度自动移位以匹配圆柱形和假圆柱形投影的地图投影区域,并且x,y被转换为地图投影坐标。如果latlon为False(默认),则假定x和y为地图投影坐标。