Использование картографии для построения бинарной карты Земли

Я пытаюсь использовать картографию, чтобы построить карту Земли только с двумя цветами. Например, земли, залитые белым цветом, и океан в темноте. На данный момент я использую метод coastlines (), который создает контур континентов, но я не знаю, как залить их цветом или залить им океан.

 import matplotlib.pyplot as plt

 fig = plt.figure(figsize=(12,6))
 ax = fig.add_subplot(1,1,1,projection = ccrs.EckertIV())
 ax.clear()
 cs = ax.contourf(longitude,lattitude,A,transform=ccrs.PlateCarree(),
    cmap='gist_gray',alpha=0.3)#,extend = 'both')
 ax.coastlines(color = 'black')

Он создает карту с континентами, но она вся белая, за исключением черных береговых линий. Есть мысли о том, как залить цветом континенты и / или океаны? Я думал об использовании метода stock_img (), но он не равномерно заполняет землю одним цветом.

Заранее спасибо !

PS: это мой первый пост, поэтому, пожалуйста, скажите мне, нужно ли вам более точно решить мою проблему или мне нужно отредактировать свой пост определенным образом


person Zeyta    schedule 03.06.2020    source источник


Ответы (1)


Вот минимальный пример. В вашем примере вы не показали, какие у вас данные longitude, latitude и A, поэтому я просто заменил их простой строкой.

import matplotlib.pyplot as plt
import cartopy
import cartopy.crs as ccrs

latitude = [0, 10]
longitude = [0, 20]

fig = plt.figure(figsize=(12, 6))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.EckertIV())

ax.set_global()
# set_extent([-180, 180, -90, 90], crs=ccrs.PlateCarree())

ax.patch.set_facecolor(color='black')
# or
# ax.background_patch.set_facecolor(color='black')   # cartopy < v0.18
# or
# ax.add_feature(cartopy.feature.OCEAN, color='black')

ax.add_feature(cartopy.feature.LAND, color='white')

ax.plot(longitude, latitude, color='red', transform=ccrs.PlateCarree())

Вы используете проекцию EckertIV, поэтому вы должны сообщить оси, что ваши значения долготы и широты привязаны к проекции PlateCarree. Вот почему вы должны использовать crs кВт в set_extent (если не используете set_global) и transform кВт в plot.

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

person Marcelo Andrioni    schedule 11.06.2020
comment
Whoua, спасибо вам большое. Я не знал о функции patch.set_facecolor, она будет очень полезна! - person Zeyta; 12.06.2020
comment
Привет @Zeyta, если этот ответ решает вашу проблему, отметьте ответ как правильный (зеленая галочка). - person Marcelo Andrioni; 12.06.2020
comment
Кроме того, вместо изменения цвета фона осей с помощью ax.patch.set_facelor вы также можете просто использовать слой ОКЕАН: ax.add_feature(cartopy.feature.OCEAN, color='black') - person Marcelo Andrioni; 12.06.2020
comment
@marceolandrioni да, я отметил это как правильное, спасибо, что напомнили мне. Я попробую поиграть со слоем ОКЕАН, но вашего первого ответа уже достаточно для того, что мне нужно сделать! Еще раз спасибо - person Zeyta; 13.06.2020