matplotlib también provee herramientas para la generación de mapas y la creación de curvas y gráficas sobre ellos. La mayor parte de estas herramientas pueden encontrarse en la sublibrería mpl_toolkits.basemap.
La clase que provee los mapas es Basemap:
from mpl_toolkits.basemap import Basemap
m = Basemap()
plt.show()
Sin embargo, el mapa por sí solo no supone ninguna salida en pantalla (la ejecución de las anteriores instrucciones no genera nada): Es necesario añadir al mapa al menos una capa de "fondo" y, en su caso, los puntos que queramos marcar en él. Adicionalmente será necesario especificar el tipo de proyección, las coordenadas en las que queremos centrar el mapa, el ancho y alto de territorio a cubrir, etc.
A modo de ejemplo, generemos un mapa centrado en las coordenadas latitud = 49 y longitud = 7, incluyendo 4.000 km de ancho y 3.000 de alto, con una proyección tipo "Lambert Conformal Conic" (LCC):
from mpl_toolkits.basemap import Basemap
fig = plt.figure(figsize = (12, 7))
m = Basemap(width = 4000 * 1000,
height = 3000 * 1000,
projection = 'lcc',
lat_0 = 49,
lon_0 = 7)
m.shadedrelief()
plt.show()
Sobre estos mapas es posible aplicar gran número de funciones. En el siguiente ejemplo, se genera un valor z asociado a diferentes puntos geográficos y se muestra un gráfico de curvas de nivel:
fig = plt.figure(figsize = (12, 7))
map = Basemap(width = 4000 * 1000,
height = 3000 * 1000,
projection = 'lcc',
lat_0 = 49,
lon_0 = 7)
map.shadedrelief()
nlats = 73;
nlons = 145;
delta = 2.0 * np.pi / (nlons - 1)
lats = (0.5 * np.pi - delta * np.indices((nlats, nlons))[0, :, :])
lons = (delta * np.indices((nlats,nlons))[1, :, :])
wave = 0.75 * (np.sin(2.0 * lats) ** 8 * np.cos(4.0 * lons))
mean = 0.5 * np.cos(2.0 * lats) * ((np.sin(2.0 * lats)) ** 2 + 2.0)
x, y = map(lons*180./np.pi, lats*180./np.pi)
cs = map.contour(x, y, wave + mean, 25, linewidths = 1.5)
plt.show()
Revisemos en las siguientes secciones parte de esta funcionalidad.