Геопанды - построение карты и местоположения

Благодаря ответу на этот вопрос я может строить карту мира геопанд с континентами и океанами, окрашенными в разные проекции.

Теперь я хотел бы добавить несколько моментов, например города, включенные в геопанды

cities = gpd.read_file(gpd.datasets.get_path('naturalearth_cities'))

К сожалению, города покрыты заполненными континентами. Есть ли способ показать эти города на карте или в верхней части карты?

Мой текущий код выглядит так:

facecolor = 'sandybrown'
edgecolor = 'black'
ocean_color = '#A8C5DD'

crs1 = ccrs.NorthPolarStereo()

world = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres"))
cities = gpd.read_file(gpd.datasets.get_path('naturalearth_cities'))

w1 = world.to_crs(crs1.proj4_init)
c1 = cities.to_crs(crs1.proj4_init)

fig1, ax1 = plt.subplots(figsize=(7,7), subplot_kw={'projection': crs1})

# useful code to set map extent,
# --- if you want maximum extent, comment out the next line of code ---
ax1.set_extent([-60.14, 130.4, -13.12, -24.59], crs=ccrs.PlateCarree())

# at maximum extent, the circular bound trims map features nicely
ax1.add_geometries(w1['geometry'], crs=crs1, facecolor=facecolor, edgecolor=edgecolor, linewidth=0.5)

# this adds the ocean coloring
ax1.add_feature(cartopy.feature.OCEAN, facecolor=ocean_color, edgecolor='none')

# this adds the cities
c1.plot(ax=ax1, marker='o', color='red', markersize=50)

Результат выглядит так:

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


person red_tiger    schedule 15.04.2019    source источник
comment
Используйте zorder, например: c1.plot(ax=ax1, marker='o', color='red', markersize=50, zorder=20) должен вывести все очки вперед.   -  person swatchai    schedule 15.04.2019
comment
Это может быть так просто :). Это сработало. Спасибо.   -  person red_tiger    schedule 16.04.2019


Ответы (1)


Порядок рисования по умолчанию для axes - участки, линии, текст. Этот порядок определяется атрибутом zorder.

Polygon/patch,  zorder=1
Line 2D,  zorder=2
Text,  zorder=3

Вы можете изменить порядок отдельных объектов карты, установив zorder. Любой отдельный вызов plot () может установить значение для zorder этого конкретного элемента.

В вашем случае код

c1.plot(ax=ax1, marker='o', color='red', markersize=50, zorder=20)

разместит маркеры поверх всех других объектов, у которых zorder меньше 20.

Демонстрация Zorder: https://matplotlib.org/gallery/misc/zorder_demo.html

person swatchai    schedule 16.04.2019