Exemples de comment mettre en couleur une zone sur une carte globale avec python et basemap:
Table des matières
Zone rectangulaire
En utilisant la fonction polygon (source: simple_basemap_example.py)

from mpl_toolkits.basemap import Basemapfrom matplotlib.patches import Polygonfrom matplotlib.collections import PatchCollectionimport numpy as npimport matplotlib.pyplot as pltfig = plt.figure()ax=fig.add_axes([0.1,0.1,0.8,0.8])m = Basemap(projection='cyl',llcrnrlat=-90,urcrnrlat=90,llcrnrlon=-180,urcrnrlon=180,resolution='c')m.drawcoastlines()m.drawparallels(np.arange(-90,90,30),labels=[1,1,0,1], fontsize=8)m.drawmeridians(np.arange(-180,180,30),labels=[1,1,0,1], rotation=45, fontsize=8)patches = []zone_A = np.array([[-138,60],[-122,60],[-122,30],[-138,30]])patches.append(Polygon(zone_A))ax.add_collection(PatchCollection(patches, facecolor='lightgreen', edgecolor='k', linewidths=0.5))plt.title('How to color a rectangular area on a worl map using Basemap ?', fontsize=8)plt.xlabel('Longitude', labelpad=40, fontsize=8)plt.ylabel('Latitude', labelpad=40, fontsize=8)plt.savefig('plot_world_map_using_matplotlib_03.png', bbox_inches='tight')
Deux zones rectangulaires
Autre exemple avec deux zones rectangulaires

from mpl_toolkits.basemap import Basemapfrom matplotlib.patches import Polygonfrom matplotlib.collections import PatchCollectionimport numpy as npimport matplotlib.pyplot as pltfig = plt.figure()ax=fig.add_axes([0.1,0.1,0.8,0.8])m = Basemap(projection='cyl',llcrnrlat=-90,urcrnrlat=90,llcrnrlon=-180,urcrnrlon=180,resolution='c')m.drawcoastlines()m.drawparallels(np.arange(-90,90,30),labels=[1,1,0,1], fontsize=8)m.drawmeridians(np.arange(-180,180,30),labels=[1,1,0,1], rotation=45, fontsize=8)patches = []zone_A = np.array([[-138,60],[-122,60],[-122,30],[-138,30]])zone_B = np.array([[-100,10],[-80,10],[-80,-20],[-100,-20]])patches.append(Polygon(zone_A))patches.append(Polygon(zone_B))ax.add_collection(PatchCollection(patches, facecolor='lightgreen', edgecolor='k', linewidths=0.5))plt.title('How to color an area on a global map with python and basemap ?', fontsize=8)plt.xlabel('Longitude', labelpad=40, fontsize=8)plt.ylabel('Latitude', labelpad=40, fontsize=8)plt.savefig('plot_world_map_using_matplotlib_04.png', bbox_inches='tight')
Zone triangulaire
Tracer une zone triangulaire

from mpl_toolkits.basemap import Basemapfrom matplotlib.patches import Polygonfrom matplotlib.collections import PatchCollectionimport numpy as npimport matplotlib.pyplot as pltfig = plt.figure()ax=fig.add_axes([0.1,0.1,0.8,0.8])m = Basemap(projection='cyl',llcrnrlat=-90,urcrnrlat=90,llcrnrlon=-180,urcrnrlon=180,resolution='c')m.drawcoastlines()m.drawparallels(np.arange(-90,90,30),labels=[1,1,0,1], fontsize=8)m.drawmeridians(np.arange(-180,180,30),labels=[1,1,0,1], rotation=45, fontsize=8)patches = []zone_A = np.array([[-80.226529,25.78910],[-66.1057427,18.4663188],[-64.781380,32.294887]])patches.append(Polygon(zone_A))ax.add_collection(PatchCollection(patches, facecolor='red', edgecolor='k', linewidths=0.5))plt.title('How to color an area on a global map with python and basemap ?', fontsize=8)plt.xlabel('Longitude', labelpad=40, fontsize=8)plt.ylabel('Latitude', labelpad=40, fontsize=8)plt.savefig('plot_world_map_using_matplotlib_05.png', bbox_inches='tight')
Zone circulaire
Un cercle avec pour origine Paris:

from mpl_toolkits.basemap import Basemapfrom matplotlib.patches import Polygonfrom matplotlib.collections import PatchCollectionimport numpy as npimport matplotlib.pyplot as pltimport mathfig = plt.figure()ax=fig.add_axes([0.1,0.1,0.8,0.8])m = Basemap(projection='cyl',llcrnrlat=-90,urcrnrlat=90,llcrnrlon=-180,urcrnrlon=180,resolution='c')m.drawcoastlines()m.drawparallels(np.arange(-90,90,30),labels=[1,1,0,1], fontsize=8)m.drawmeridians(np.arange(-180,180,30),labels=[1,1,0,1], rotation=45, fontsize=8)patches = []center = (2.35,48.85)radius = 10nb_points = 20zone_A = []for i in range(nb_points):zone_A.append((center[0]+radius * math.cos(2.*i*math.pi/nb_points),center[1]+radius*math.sin(2.*i*math.pi/nb_points)))patches.append(Polygon(zone_A))ax.add_collection(PatchCollection(patches, facecolor='red', edgecolor='k', linewidths=0.5))plt.title('How to color an area on a global map with python and basemap ?', fontsize=8)plt.xlabel('Longitude', labelpad=40, fontsize=8)plt.ylabel('Latitude', labelpad=40, fontsize=8)plt.savefig('plot_world_map_using_matplotlib_06.png', bbox_inches='tight')
Références
| Liens | Site |
|---|---|
| simple_basemap_example.py | github |
| Drawing boxes on basemap with real Lat-Lon | stackoverflow |
| matplotlib box on basemap map | stackoverflow |
| How to draw rectangles on a Basemap | stackoverflow |
| matplotlib basemap toolkit | matplotlib |
| Plotting data on a map (Example Gallery) | matplotlib |
| Rotating Basemap Meridian labels on x-axis | stackoverflow |
| Python: Fill space between two lines drawn on a Basemap | stackoverflow |
