Mapa de coropletas en Python con geopandas

Librería

geopandas

Autor principal

GeoPandas developers

Un mapa de coropletas colorea cada región según el valor de una variable. Con geopandas puedes leer un shapefile o un archivo GeoJSON en un GeoDataFrame y dibujarlo con su método plot, que utiliza matplotlib. Los ejemplos muestran la tasa de paro (%) de las comunidades autónomas de España; las islas Canarias se acercan a la península con translate, como es habitual en los mapas de España.

Mapa de coropletas con plot

Pasa el nombre de la columna a representar al argumento column de plot. legend = True agrega una barra de color.

import geopandas as gpd
import matplotlib.pyplot as plt

spain = gpd.read_file("https://raw.githubusercontent.com/R-CoderDotCom/data/main/shapefile_spain/spain.zip")

# Acercar las islas Canarias a la península
canarias = spain["name"] == "Islas Canarias"
spain.loc[canarias, "geometry"] = spain[canarias].translate(xoff = 5, yoff = 6.5)

fig, ax = plt.subplots()
spain.plot(column = "unemp_rate", legend = True, ax = ax)
ax.axis("off")
# plt.show()

Mapa de coropletas en Python con geopandas

Colormap y bordes

Elige los colores con cmap y personaliza los bordes de las regiones con edgecolor y linewidth.

import geopandas as gpd
import matplotlib.pyplot as plt

spain = gpd.read_file("https://raw.githubusercontent.com/R-CoderDotCom/data/main/shapefile_spain/spain.zip")

# Acercar las islas Canarias a la península
canarias = spain["name"] == "Islas Canarias"
spain.loc[canarias, "geometry"] = spain[canarias].translate(xoff = 5, yoff = 6.5)

fig, ax = plt.subplots()
spain.plot(column = "unemp_rate", cmap = "Reds",
           edgecolor = "white", linewidth = 0.8, legend = True, ax = ax)
ax.axis("off")
# plt.show()

Cambiar los colores y los bordes de un mapa de coropletas de geopandas

Personalización de la leyenda

legend_kwds pasa argumentos a la barra de color, como su etiqueta (label), su orientación (orientation) o su tamaño con shrink.

import geopandas as gpd
import matplotlib.pyplot as plt

spain = gpd.read_file("https://raw.githubusercontent.com/R-CoderDotCom/data/main/shapefile_spain/spain.zip")

# Acercar las islas Canarias a la península
canarias = spain["name"] == "Islas Canarias"
spain.loc[canarias, "geometry"] = spain[canarias].translate(xoff = 5, yoff = 6.5)

fig, ax = plt.subplots()
spain.plot(column = "unemp_rate", cmap = "YlOrRd", edgecolor = "white", linewidth = 0.6,
           legend = True, ax = ax,
           legend_kwds = {"label": "Tasa de paro (%)",
                          "orientation": "horizontal", "shrink": 0.7})
ax.set_title("Paro en España", fontsize = 14)
ax.axis("off")
# plt.show()

Mapa de coropletas con leyenda horizontal en geopandas

Agrupar los valores en clases

En lugar de una escala continua puedes agrupar los valores en intervalos con pd.cut y representarlos como una variable categórica con categorical = True.

import geopandas as gpd
import matplotlib.pyplot as plt

spain = gpd.read_file("https://raw.githubusercontent.com/R-CoderDotCom/data/main/shapefile_spain/spain.zip")

# Acercar las islas Canarias a la península
canarias = spain["name"] == "Islas Canarias"
spain.loc[canarias, "geometry"] = spain[canarias].translate(xoff = 5, yoff = 6.5)
import pandas as pd

spain["level"] = pd.cut(spain["unemp_rate"], bins = [0, 10, 15, 30],
                        labels = ["Bajo", "Medio", "Alto"])

fig, ax = plt.subplots()
spain.plot(column = "level", categorical = True, cmap = "RdYlGn_r",
           legend = True, edgecolor = "white", ax = ax)
ax.axis("off")
# plt.show()

Mapa de coropletas con clases en geopandas

Etiquetas sobre las regiones

Escribe el valor de cada región en un punto de su interior, obtenido con representative_point.

import geopandas as gpd
import matplotlib.pyplot as plt

spain = gpd.read_file("https://raw.githubusercontent.com/R-CoderDotCom/data/main/shapefile_spain/spain.zip")

# Acercar las islas Canarias a la península
canarias = spain["name"] == "Islas Canarias"
spain.loc[canarias, "geometry"] = spain[canarias].translate(xoff = 5, yoff = 6.5)

fig, ax = plt.subplots()
spain.plot(column = "unemp_rate", cmap = "Blues", edgecolor = "white", ax = ax)

for geom, value in zip(spain.geometry, spain["unemp_rate"]):
    p = geom.representative_point()
    ax.annotate(f"{value:.0f}", (p.x, p.y), ha = "center", fontsize = 7)
ax.axis("off")
# plt.show()

Mapa de coropletas con etiquetas en geopandas

Para crear un mapa de coropletas interactivo consulta el tutorial sobre el mapa de coropletas en plotly, y para lo básico de geopandas el tutorial sobre mapas estáticos con geopandas.

Fundamentals of Data Visualization

A Primer on Making Informative and Compelling Figures

Comprar en Amazon
Data Sketches

A journey of imagination, exploration, and beautiful data visualizations

Comprar en Amazon

También te puede interesar