Базовая карта matplotlib, выдает графики по координатам в matplotlib с широтой и долготой - PullRequest
0 голосов
/ 28 июня 2018

У меня есть следующий список координат, большинство из которых находятся только в США. Я проверил их, используя fusiontables приложения Google, чтобы увидеть, где они будут отображаться там. После этого становится очевидным, что значения, которые отображает matplotlib, просто ... мусор.

Согласно таблицам Google Fusion, мой вывод должен выглядеть более точно как ... Действительно, ключевым выводом является то, что большинство координат находятся в США. 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()

Этот код отображает большинство значений на континенте Антарктида. Не буду предоставлять скриншот, потому что я не думаю, что он действительно передает какую-либо полезную информацию, кроме факта, что этот код не работает. координаты latitude и longitutde получены из API карт Google (https://developers.google.com/maps/documentation/geocoding/intro). Как мне изменить эти координаты, чтобы я мог отобразить их в matplotlib? Я думал, что аргумент latlon поможет мне позаботиться этого, но ...

1 Ответ

0 голосов
/ 28 июня 2018

Это похоже на общую проблему, с которой я иногда сталкиваюсь при построении графиков: ваши источники данных и методы построения графиков ожидают, что ваши данные координат находятся в другом порядке.

Полагаю, объяснение состоит в том, что, хотя "широта и долгота" является наиболее традиционным порядком обращения к парам координат, когда построение графика входит в сцену, долгота эквивалентна оси X, а широта - Y оси, и поэтому некоторые API (известный пример - координаты KML) используют порядок «долгота / широта».

В конце концов, любой из них действителен, конечно, это просто вопрос соглашения, но иногда нам приходится переходить от одного соглашения к другому.

...