2015-04-12 72 views
4

大洲我试图在使用散点图“锤”底图绘制的数据集。但是,这些数据点不会绘制在各大洲之上。我在matplotlib example中注意到,大陆上也没有数据(我认为这是由于例子的性质)。我想知道如果我做错了什么,或者如果数据不能在设计上使用“锤子”绘制在大陆之上。散点图数据不会出现在“锤”底图

如果是这样的话,有没有用在整个地球绘制散点图数据的理想底图(使用的地形图将是巨大的,但我想在这一点上解决任何东西)?

回答

7

你可能缺少关键字来解释LAT-LON数据等。从帮助Basemap.scatter:

如果latlon关键字设置为True,x,y是intrepreted经度 和纬度度数。数据和经度是自动 转移到圆柱形和 伪圆柱突起,并且x匹配地图投影区域,Y变换为映射 投影坐标。如果latlon为False(默认值),x和y是 假定为地图投影坐标。

我还需要增加z-order以便分散在大陆和海洋之上。

import time, calendar, datetime, numpy 
from mpl_toolkits.basemap import Basemap 
import matplotlib.pyplot as plt 
# draw map with markers for float locations 
m = Basemap(projection='hammer',lon_0=180) 
m.drawmapboundary(fill_color='#99ffff') 
m.fillcontinents(color='#cc9966',lake_color='#99ffff') 

m.scatter([-73.98, 238., 0.08, 0., 116.38],[40.78,47.6, 51.53,0., 39.91], 
      latlon=True, # Ta-da! 
      marker='o',color='k', 
      zorder=10) 

plt.title('Hammer projection, data on top',fontsize=12) 
plt.show() 

enter image description here

+1

这是伟大的,谢谢!我已经使用* x,y = m(lons,lats)*设置了latlon数据。我缺少的是* zorder = 10 *。虽然,很高兴知道我可以在scatter中使用* latlon = True *。 – WillaB

+1

我很幸运,因为我选择了一个海滨城市作为测试用例,我可以看到* *一半的标记 - 很明显这是大陆下,但不是海洋。 – cphlewis