Note
Go to the end to download the full example code.
ChoroplethΒΆ
A choropleth maps a relative quantity (here a standardised mortality rate) to colour value. Data: mortality from heart failure, rate per 100,000 inhabitants, 2020-2022 average (Sante publique France, ODISSE).
Hover a department to read its value.
from pathlib import Path
import pandas as pd
from mappyng import Map, BasemapLayer, ChoroplethLayer, VectorLayer
from mappyng.data import load_france_departments, load_france_regions, load_europe
europe = load_europe().to_crs(2154)
regions = load_france_regions().to_crs(2154)
deps = load_france_departments().to_crs(2154)
df = pd.read_csv(Path("data") / "cardio_mortalite_dep.csv", dtype={"code_dep": str})
deps = deps.merge(df, left_on="COD_GEO", right_on="code_dep", how="left")
# Mainland frame (Lambert-93) and overseas cartouches (declared in 3857).
bbox_metro = [90000, 6040000, 1280000, 7150000]
cartouches = {
0: {"bbox": [-6890454, 1780151, -6799589, 1874186], "crs": 3857,
"cartouche_title": "Guadeloupe", "cartouche_title_size": 7,
"border_radius": 6, "box_shadow": True},
1: {"bbox": [-6826862, 1609607, -6759494, 1685367], "crs": 3857,
"cartouche_title": "Martinique", "cartouche_title_size": 7,
"border_radius": 6, "box_shadow": True},
2: {"bbox": [-6136680, 235261, -5707791, 671780], "crs": 3857,
"cartouche_title": "French Guiana", "cartouche_title_size": 7,
"border_radius": 6, "box_shadow": True},
3: {"bbox": [6136383, -2448160, 6226316, -2366992], "crs": 3857,
"cartouche_title": "Reunion", "cartouche_title_size": 7,
"border_radius": 6, "box_shadow": True},
4: {"bbox": [5006226, -1459183, 5050208, -1416184], "crs": 3857,
"cartouche_title": "Mayotte", "cartouche_title_size": 7,
"border_radius": 6, "box_shadow": True},
}
m = Map(europe, bbox=bbox_metro, width=900, height=1000, padding=25,
facecolor="#B9D9EB", border_radius=10,
box_shadow={"dx": 3, "dy": 3, "blur": 6, "opacity": 0.2},
cartouche_params=cartouches, cartouche_spacing=15)
# European countries as background, with France lifted by a drop shadow.
m.add(BasemapLayer())
m.add(VectorLayer(regions, stroke="#4d4d4d", stroke_width=0.1, on_cartouches=True))
m.add_shadow(europe, {"query": "code_pays_iso3=='FRA'", "on_cartouches": True})
m.add(ChoroplethLayer(
deps,
column="taux_mortalite",
cmap="Reds",
method="Quantiles",
num_classes=5,
stroke_width=0.15,
legend={"title": "Deaths / 100,000 inhabitants", "orientation": "horizontal",
"decimals": 0, "nodata_label": "No data"},
on_cartouches=True,
))
m.add(VectorLayer(regions, stroke="#333333", stroke_width=0.4, position="top",
on_cartouches=True))
m.title("Mortality from heart failure",
subtitle="Standardised rate, 2020-2022 average")
m.scale_bar(length=100000, label="100 km", position={"x": 0.46, "y": 0.9},
opacity=0.8)
m.source("Source: Sante publique France (ODISSE)")
# Hover tooltips. The gallery embeds an interactive SVG from this dict; the
# same call also yields a standalone HTML file.
TOOLTIP = {"columns": ["LIB_GEO", "taux_mortalite"],
"aliases": {"LIB_GEO": "Department", "taux_mortalite": "Rate"}}
interactive = m.to_interactive(**TOOLTIP)
# interactive.save("choropleth.html")
Total running time of the script: (0 minutes 0.423 seconds)