Pythonではよくcartopyを使って地図を作るのですが、
複数(3つ以上)の国・地域をまとめて指定する場合、苦戦したので書き留めておきます。
なお、国・地域の指定はISOコード(以下のwikiではnumeric)を使用しています。
色付けする国・地域が3つ以下の場合
日本を青に色付けしてみます。3つ以下なら、if文を続けて書いてしまった方が手っ取り早いと思います。
#!/usr/bin/env python3
import matplotlib.pyplot as plt
import cartopy
import cartopy.io.shapereader as shpreader
import cartopy.crs as ccrs
import matplotlib.patches as mpatches
#解像度の設定
set_dpi = 300
#ここから作図
plt.figure(figsize=[16,9])
#シェイプファイルの読み込み
shpfilename = shpreader.natural_earth(resolution='110m',
category='cultural',
name='admin_0_countries')
src = shpreader.Reader(shpfilename)
#陸地・海岸線・国境の作図
ax = plt.axes(projection=ccrs.PlateCarree())
ax.add_feature(cartopy.feature.LAND, facecolor='white', zorder=0)
ax.coastlines(resolution='50m', lw=0.5, zorder=0)
ax.add_feature(cartopy.feature.BORDERS, linestyle='-', alpha=.5, zorder=0)
#国・地域の色付け。色付けが3つ以下であれば、if~を同じように続けて書けばよい
for rec in src.records():
#392は日本のISOコードのこと
#rec.attributes['ADM0_A3']でも良いが、対応していない国・地域もあるので注意
if rec.attributes['ISO_N3'] == '392':
ax.add_geometries(rec.geometry, ccrs.PlateCarree(), facecolor='b')
#pngで保存
fileo1 = 'map_ja'+'.png'
plt.savefig(fileo1, format='png', dpi=set_dpi)
#plt.show()

色付けする国・地域が3つ以上の場合
2020/06にテレビ会議が予定されていることで話題になっている、G7に含まれる国・地域を色付けしてみます。
変更した部分はif文とその直後にあるforループです。break else continueがポイントです。
#!/usr/bin/env python3
import matplotlib.pyplot as plt
import cartopy
import cartopy.io.shapereader as shpreader
import cartopy.crs as ccrs
import matplotlib.patches as mpatches
#解像度の設定
set_dpi = 300
#左からフランス, アメリカ, イギリス, ドイツ, イタリア,日本のISOコード
g7_list =[250, 840, 826, 840, 380, 124, 392]
nlist = len(g7_list)
#ここから作図開始
fig = plt.figure(figsize = (16, 9))
#natural_earthのシェイプファイルを読み込む
shpfilename = shpreader.natural_earth(resolution='110m',
category='cultural',
name='admin_0_countries')
src = shpreader.Reader(shpfilename)
#陸地・海岸線・国境の作図
ax = fig.add_axes([0,0,1,1], projection=ccrs.PlateCarree())
ax.add_feature(cartopy.feature.LAND, facecolor='white', zorder=0)
ax.coastlines(resolution='50m', lw=0.5, zorder=0)
ax.add_feature(cartopy.feature.BORDERS, linestyle='-',zorder=1, edgecolor='k')
#国・地域の色付け
for rec in src.records():
for L in range(nlist):
cL = str(g7_list[L])
#南極(ISOコード010)などコード番号が100以下の国を色付けする場合は、listに10と記入しzfillで埋める
#break else continueをしないと、最初に指定した国だけ色付けすることになってしまう
if rec.attributes['ISO_N3'] == cL.zfill(3):
ax.add_geometries(rec.geometry,ccrs.PlateCarree(),
edgecolor='b', facecolor='none', hatch='//', zorder=0)
break
else:
continue
#legendの設定
LegendElement = [mpatches.Patch(label="Group of Seven", edgecolor='b', facecolor='none', hatch='//')]
ax.legend(handles = LegendElement, loc='lower left', fontsize=30)
#pngで保存
fileo1 = 'map_g7'+'.png'
plt.savefig(fileo1, format='png', dpi=set_dpi)
#plt.show()
