How Metro Graph compares subway networks, what every metric means,
and where the data comes from.
What this is
Metro Graph compares subway / metro networks across 40+ cities on
topology, geographic extent, frequency, centrality, robustness, and
population coverage. Most networks are built from the operator's
public GTFS feed (filtered to subway / metro route_type
codes); planned networks and a few small operating systems come from
other sources (see Data sources). Each is then analysed as a graph.
This is the short version of the NSA Hub network analysis — what
every metric means in plain English and how to read the comparison
chart. Each metric's full definition and source appear in its
section below.
Data sources
GTFS feeds, one per city (Source link in the
sidebar opens the operator's open-data portal).
WorldPop 2020 1km population-density grid
sampled via ArcGIS.
Carto Positron basemap.
JTMT shapefiles for the planned Jerusalem
metro (vendored under data/jtmt/). JLM population
uses the same WorldPop 2020 method as the peer cities.
National MT GeoPackage (vendored under
data/mt/) for the planned Tel Aviv / Haifa metro
lines.
OpenStreetMap station coordinates for a few
small operating metros with no usable public GTFS (Lausanne,
Thessaloniki, Catania).
Network comparison tab — how to read it
The second view in the app is a multi-city scatter explorer. Every
chart maps four dimensions onto one figure:
X axis — any metric.
Y axis — any metric.
Bubble size — any metric, scaled linearly.
Bubble color — either the μ-based topology family
(green tree → red densely meshed) or any metric on a continuous ramp.
Presets are pre-wired combinations the explorer
opens with — pick "Network density vs walk-shed coverage" for a quick
read on whether the metro hits where people live.
Custom mode opens the four dropdowns for any
combination. Bar mode ranks every city on one metric.
Limitations
Schedule-time, not real-time. Frequency reflects
the GTFS schedule on the configured service date. Planned networks
and the few OSM-built small metros have no schedule, so their
frequency is synthesised from a nominal headway.
"Subway" is fuzzy. Each city declares its
route_types — Berlin is U-Bahn only here; LA includes
light rail because that's the bulk of the system; Boston excludes
the Green Line (light rail).
Coverage counts 800 m walking distance only.
Hilly cities (Jerusalem, Lisbon) inflate real walk times.
JLM frequency is synthetic — 5-min headway × 18 h
service day, not from an observed timetable.
No ridership data — every metric here is structural
or population-based, none use boardings.
Size and extent
Stations — count after merging duplicate platforms within 500 m of each other on the same line.
Lines — distinct logical lines (e.g. M1A and M1B counted separately when they appear as separate GTFS routes).
Metro network km — metro alignment length, counted once across graph edges using real GTFS/JTMT shape geometry where available; this is not route-km or engineering track-km.
Avg station spacing — metro network km ÷ (stations − 1). 0.7–1.0 km is European-urban convention; ≥ 2 km is suburban (BART, Atlanta).
Interchanges — stations served by ≥ 2 distinct lines.
Articulation points — stations whose removal disconnects the graph. High % = tree-like, fragile network.
Topology & cycles
Cyclomatic μ — number of independent loops in the network. μ = 0 means tree (no redundancy); μ ≥ 1 means at least one closed route exists.
α index — cycle saturation (0–1).
β index — edges per node.
Derrible & Kennedy 2010 indicators
Coverage σ (eq. 9) = 0.25 · stations / radius². Station density in the service circle. Topology-only — does not see whether people live near stations.
Max transfers d — worst-case number of line transfers between any pair of stations (the Dong & Chen 2005 transit-line-network model). d = 1 means one transfer always suffices.
Directness τ (eq. 16) = n_lines / d. Higher τ = the network exposes many lines reachable within the same transfer budget; lower τ = many lines but they require lots of transfers to traverse. Trees have d = 0 so τ is undefined and reported as 0.
Connectivity ρ (eq. 14) = (Σ(lines_at_transfer − 1) − overlap_edges) / transfer_stations. Higher ρ = transfers usually link three or more lines (rich interchanges); ρ near 0 = transfers are mostly two-line.
Boardings per capita — annual unlinked passenger trips (UPT) divided by service-area population. Used in the original Derrible & Kennedy 2009 paper as the outcome variable σ / τ / ρ should predict (Figures 3-5). Sourced from each operator's published ridership (Wikipedia) for the 28 operating cities; for JLM and JLM-M3 it is the JTMT 2050 FORECAST (120 M / 150 M pax/yr) — not a measurement.
Structure & paths
Avg shortest path — average number of stops between two stations.
Diameter — longest shortest path.
Roth core size % — share of stations left after the network's branches are pruned away: repeatedly strip dead-end stations until none remain, and what survives is the loop-bearing core. High = most of the network sits on the core; low = the system is mostly radial branches.
Per-station centrality
Betweenness — fraction of shortest paths through this station. High = the network's bottleneck.
Closeness — average graph-distance to all other stations. High = central.
Eccentricity — distance to the farthest station, computed within the station's own connected component.
Criticality — the share of the network's global efficiency lost when this station is removed (a relative drop, so values compare across cities). Clamped at zero in the rare case where removing a peripheral station nudges efficiency up.
Robustness
Robustness r_T — area under the surviving-component curve during an adaptive targeted attack: the highest-degree station is removed, degrees are recomputed on what remains, and the new highest-degree station goes next, per Schneider et al. 2011. Bounded roughly 0–0.5; higher = the network keeps more of itself connected under worst-case station loss.
Population & reach
Population in area — total population inside the service circle (WorldPop 2020 by default; polygon overrides are supported for scenario tests). This is the figure the coverage maths uses.
City & metropolitan population — curated context figures (municipality and metro-area population) shown in the stats card and comparison table. These are not the WorldPop "Population in area" above and are not used in any coverage or per-capita metric.
Walk-shed coverage % — share of that population within 800 m of any station. The single best "is this useful for the city" indicator.
Network density — metro network km / service-area km². How packed the metro is within its catchment.
LRT network km / LRT-to-metro ratio — dissolved tram / light-rail network km in the same service area, divided by metro network km. n/a means no usable tram geometry in the selected feed.
Stations / metro network km per million — per-capita reach.
Map color modes — quick reference
Stations
Lines served — how many distinct lines stop here. ≥ 2 = interchange.