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.
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()

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()

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()

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()

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()

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.
También te puede interesar