European (major) capitals
Data acquisition
Download nodes from capital cities in a given bounding box (west, south, east, north)
from cartes.osm import Overpass
capitals = Overpass.request(
bounds=(-30, 33, 35, 70),
node={"capital": "yes"}
)
Data preprocessing
None
Data visualisation
import altair as alt
from vega_datasets import data
# Capital cities information
base = alt.Chart(capitals).encode(
alt.Tooltip(["name:N", "population:Q"]),
alt.Text("name:en:N"),
)
# Data generators for the background
sphere = alt.sphere()
graticule = alt.graticule()
# Source of land data
source = alt.topo_feature(data.world_110m.url, "countries")
alt.layer(
# First the graticule for the projection
alt.Chart(alt.graticule()).mark_geoshape(stroke="lightgray"),
# The map
alt.Chart(source).mark_geoshape(fill="lightgray", stroke="black"),
# The points for locating the cities
base.mark_geoshape().encode(alt.Color("population:Q")),
# City names if population is above 300k
base.mark_text(font="Ubuntu", fontSize=12, dy=10, align="center")
.encode(alt.Latitude("latitude:Q"), alt.Longitude("longitude:Q"))
.transform_filter("datum.population > 300000"),
).properties(
width=500, height=400, title="European (major) Capitals"
).configure_title(
font="Fira Sans", fontSize=16, anchor="start"
).project(
# The projection (coming soon as crs)
"conicConformal",
rotate=[-15, -52, 0],
parallels=[35, 65],
scale=400,
)