matplotlib底图,使用纬度和经度通过matplotlib中的坐标进行图形绘制

时间:2018-06-28 19:14:09

标签: python matplotlib geocoding matplotlib-basemap

我有以下坐标列表,其中大多数仅在美国使用。我使用Google应用程序的Fusiontables检查了它们,以查看它们在此处显示的位置。之后,很明显,matplotlib显示的值只是...垃圾。

根据谷歌融合表,我的输出应该看起来更像是……实际上,最重要的是大多数坐标都在美国。 most coordinates are in the U.S.

 latitudes = [37.09024, -37.605, 43.04819620000001, 29.7604267, 47.6062095, 34.0232431, 31.968598800000002, None, None, None, 44.1455225, 42.09868669999999, 42.360082500000004, 36.737798100000006, 38.57670170000001, 34.0522342, 31.230390399999997, None, 52.922530099999996, 56.130366, 38.9071923, 34.187575200000005, 41.499320000000004, 47.9789848, 39.2903848, 19.724110600000003, 38.9071923, 39.32098010000001, 44.2311717, 41.8498339, 40.7127753, 49.4928119, 55.8417014, None, 38.9071923, None, 30.267153000000004, 46.7297771, 36.9741171, 40.0583238, 37.387474, 37.548269700000006, 40.902988, 33.7489954, -25.274398, 27.950575, 43.653226000000004, 37.485215200000006, 38.9071923]
longitudes =  [-95.712891, 145.14600000000002, -76.0488458, -95.36980279999999, -122.33207079999998, -84.36155550000001, -99.9018131, None, None, None, -88.49151540000001, -75.91797380000001, -71.0588801, -119.78712469999999, -92.17351640000001, -118.24368490000002, 121.4737021, None, -1.4746186000000001, -106.34677099999999, -77.03687070000001, -118.5900635, -81.6943605, -122.2020795, -76.6121893, -155.08681930000003, -77.03687070000001, -111.0937311, -76.48595440000001, -87.8806738, -74.0059728, -117.29483429999999, -3.2155866, None, -77.03687070000001, None, -97.7430608, -117.18173770000001, -122.0307963, -74.40566120000001, -122.05754340000001, -121.98857190000001, -74.9577372, -84.3879824, 133.775136, -82.4571776, -79.3831843, -122.2363548, -77.03687070000001]


 x,y= list(zip(*sorted(zip(latitudes, longitudes), key=lambda it: it[0])))
 plt.figure(figsize=(12, 6))
 map = Basemap(projection='mill', lon_0=180)
 something = map.scatter(x, y, latlon=True, marker='.', color='g', s=24, zorder=10)
 map.drawparallels(np.arange(-90,90,30),labels=[1,0,0,0])
 map.drawmeridians(np.arange(map.lonmin,map.lonmax+30,60),labels=[0,0,0,1])
 map.fillcontinents(color='coral',lake_color='aqua')
 map.drawcountries()
 plt.title('Small Amount of Data Plot')
 plt.show()

此代码绘制了南极洲大部分的值。不提供屏幕截图,因为除了该代码无法正常工作外,我认为它并没有传达任何有用的信息。 latitudelongitutde坐标来自google maps api(https://developers.google.com/maps/documentation/geocoding/intro)。我应该如何修改这些坐标,以便可以在matplotlib中绘制它们?我以为latlon的论点可以帮助我解决这个问题,但是...

1 个答案:

答案 0 :(得分:1)

这似乎是我在处理坐标时有时会遇到的常见问题:您的数据源和绘图方法期望坐标数据以不同的顺序排列。

我猜想这是因为,尽管“纬度和经度”是引用坐标对的最传统的顺序,但是当 plotting 进入场景时,“经度”等效于X轴,而“经度”等于Y轴,因此某些API(例如KML坐标)是使用“经度/纬度”排序的。

最后,任何一个当然是有效的,这只是一个约定问题,但是有时我们必须从一个约定转换为另一个约定。