Наклейки по странам

Я хотел бы построить траекторию на базовой карте и иметь метки (имена) страны, которые отображаются в виде наложения.

Вот текущий код и его карта:

import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap path = "path\\to\\data" animal_data = pd.DataFrame.from_csv(path, header=None) animal_data.columns = ["date", "time", "gps_lat", "gps_long"] # data cleaning omitted for clarity params = { 'projection':'merc', 'lat_0':animal_data.gps_lat.mean(), 'lon_0':animal_data.gps_long.mean(), 'resolution':'h', 'area_thresh':0.1, 'llcrnrlon':animal_data.gps_long.min()-10, 'llcrnrlat':animal_data.gps_lat.min()-10, 'urcrnrlon':animal_data.gps_long.max()+10, 'urcrnrlat':animal_data.gps_lat.max()+10 } map = Basemap(**params) map.drawcoastlines() map.drawcountries() map.fillcontinents(color = 'coral') map.drawmapboundary() x, y = map(animal_data.gps_long.values, animal_data.gps_lat.values) map.plot(x, y, 'b-', linewidth=1) plt.show() 

В результате получается карта: миграция

Это карта траектории мигрирующей птицы. Хотя это очень хорошая карта (!), Мне нужны ярлыки с названиями стран, поэтому легко определить страны, в которых летает птица.

Есть ли прямой способ добавления названий стран?

One Solution collect form web for “Наклейки по странам”

Мое решение зависит от внешнего файла данных, который может быть или не быть доступным в будущем. Однако аналогичные данные можно найти в другом месте, поэтому это не должно быть слишком большой проблемой.

Во-первых, код для печати названий названий стран:

 import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap class MyBasemap(Basemap): def printcountries(self, d=3, max_len=12): data = pd.io.parsers.read_csv("http://opengeocode.org/cude/download.php?file=/home/fashions/public_html/opengeocode.org/download/cow.txt", sep=";", skiprows=28 ) data = data[(data.latitude > self.llcrnrlat+d) & (data.latitude < self.urcrnrlat-d) & (data.longitude > self.llcrnrlon+d) & (data.longitude < self.urcrnrlon-d)] for ix, country in data.iterrows(): plt.text(*self(country.longitude, country.latitude), s=country.BGN_name[:max_len]) 

Все это позволяет загрузить базу данных по странам, а затем выбрать страны, которые в настоящее время находятся на карте, и маркировать их.

Полный код:

 import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap class MyBasemap(Basemap): def printcountries(self, d=3, max_len=12): data = pd.io.parsers.read_csv("http://opengeocode.org/cude/download.php?file=/home/fashions/public_html/opengeocode.org/download/cow.txt", sep=";", skiprows=28 ) data = data[(data.latitude > self.llcrnrlat+d) & (data.latitude < self.urcrnrlat-d) & (data.longitude > self.llcrnrlon+d) & (data.longitude < self.urcrnrlon-d)] for ix, country in data.iterrows(): plt.text(*self(country.longitude, country.latitude), s=country.BGN_name[:max_len]) path = "path\\to\\data" animal_data = pd.DataFrame.from_csv(path, header=None) animal_data.columns = ["date", "time", "gps_lat", "gps_long"] params = { 'projection':'merc', 'lat_0':animal_data.gps_lat.mean(), 'lon_0':animal_data.gps_long.mean(), 'resolution':'h', 'area_thresh':0.1, 'llcrnrlon':animal_data.gps_long.min()-10, 'llcrnrlat':animal_data.gps_lat.min()-10, 'urcrnrlon':animal_data.gps_long.max()+10, 'urcrnrlat':animal_data.gps_lat.max()+10 } plt.figure() map = MyBasemap(**params) map.drawcoastlines() map.fillcontinents(color = 'coral') map.drawmapboundary() map.drawcountries() map.printcountries() x, y = map(animal_data.gps_long.values, animal_data.gps_lat.values) map.plot(x, y, 'b-', linewidth=1) plt.show() 

и, наконец, результат:

labeld-карта

Очевидно, это не так тщательно маркируется, как можно было бы надеяться, и некоторые эвристики относительно размера страны, длины имени и размера карты должны быть реализованы, чтобы сделать это идеально, но это хорошая отправная точка.

  • Массовая анимация Matplotlib
  • python: карта мира растяжения
  • Выберите начальный цвет в цветовой палитре matplotlib
  • Построение кривой кривой в базе данных Python
  • Python и Matplotlib и аннотации с указателем мыши
  • Как сделать группу и ось одинаковой длины?
  • Базовая карта Matplotlib: всплывающее окно
  • Резервная сетка от центральных координат к внешним (то есть угловым) координатам
  • Python - лучший язык программирования в мире.