Раскрашивание определенных стран с помощью геопанд

Я хочу нанести на карту расположение определенных объектов на африканском континенте, и я могу сделать это, используя приведенный ниже код. Теперь я хочу раскрасить только отдельные страны (возьмем для примера Намибию), чтобы сделать другой анализ более ясным. Кто-нибудь знает, как это сделать чисто? Заранее большое спасибо.

Бест, Брэм

import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

data = pd.read_csv("Repair_yards_africa.csv")

base = world[world.continent == 'Africa'].plot(color='white', edgecolor='black')

data['Coordinates'] = list(zip(data.lon, data.lat))
data['Coordinates'] = data['Coordinates'].apply(Point)
geodata = gpd.GeoDataFrame(data, geometry='Coordinates')
geodata.plot(ax=base, color='red', markersize=11)
plt.ylabel('Lattitude')
plt.xlabel('Longitude')

person Bram van der Plas    schedule 04.11.2018    source источник
comment
geopandas.org/mapping.html#choropleth-maps   -  person Paul H    schedule 05.11.2018
comment
Привет, Пол, спасибо за ваш комментарий. Я видел эту страницу и пробовал несколько вещей, включая добавление cmap. Я хочу использовать cmap только для определенных стран, знаете ли вы, как это сделать? 'world.county ==' Namibia '' не похоже на объект. Спасибо   -  person Bram van der Plas    schedule 05.11.2018
comment
Я добавил к нему следующее: geopandas.org/mergingdata.html   -  person Bram van der Plas    schedule 05.11.2018
comment
Понятно, jonathansoma.com/lede/foundations-2017/ classes / geopandas / Это хорошая ссылка для всех, кому интересно.   -  person Bram van der Plas    schedule 13.11.2018


Ответы (1)


Это может быть чистый способ окраски только определенных стран (например, Намибии). Дана только соответствующая часть кода.

import matplotlib.pyplot as plt
import geopandas as gpd
from descartes import PolygonPatch

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

def plotCountryPatch( axes, country_name, fcolor ):
    # plot a country on the provided axes
    nami = world[world.name == country_name]
    namigm = nami.__geo_interface__['features']  # geopandas's geo_interface
    namig0 = {'type': namigm[0]['geometry']['type'], \
              'coordinates': namigm[0]['geometry']['coordinates']}
    axes.add_patch(PolygonPatch( namig0, fc=fcolor, ec="black", alpha=0.85, zorder=2 ))

# plot the whole world
#ax2 = world.plot( figsize=(8,4), edgecolor=u'gray', cmap='Set2' )

# or plot Africa continent
ax2 = world[world.continent == 'Africa'].plot(figsize=(8,8), edgecolor=u'gray', cmap='Pastel1')

# then plot some countries on top
plotCountryPatch(ax2, 'Namibia', 'red')
plotCountryPatch(ax2, 'Libya', 'green')

# the place to plot additional vector data (points, lines)

plt.ylabel('Latitude')
plt.xlabel('Longitude')

#ax2.axis('scaled')
plt.show()

Получившийся сюжет:

введите описание изображения здесь

Изменить

В качестве альтернативы, сюжет можно создать с помощью этой более короткой версии кода.

import matplotlib.pyplot as plt
import geopandas as gpd
from descartes import PolygonPatch

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

# or plot Africa continent
ax2 = world[world.continent == 'Africa'].plot(figsize=(8,8), edgecolor=u'gray', cmap='Pastel1')

world[world.name == "Libya"].plot(edgecolor=u'gray', color='green', ax=ax2)
world[world.name == "Namibia"].plot(edgecolor=u'gray', color='red', ax=ax2)

# the place to plot additional vector data (points, lines)

plt.ylabel('Latitude')
plt.xlabel('Longitude')

#ax2.axis('scaled')
plt.show()
person swatchai    schedule 13.11.2018
comment
Дорогой сватчай, это выглядит очень элегантно, спасибо. Я использовал менее изящный способ добавления столбца с очень низкими / высокими значениями, чтобы указать, какие страны нужно раскрасить, и использовал cmap 'pastel1' для создания хлоропетовой карты. Это тоже работает! В любом случае спасибо за ваш ответ. - person Bram van der Plas; 15.11.2018