EU overcrowding by national income threshold — 2025

Source: Eurostat EU-SILC, ilc_lvho05a, https://doi.org/10.2908/ILC_LVHO05A ; accessed 29 October 2026.

28 rows: all 27 EU countries plus the separately published EU27_2020 aggregate, which is not an unweighted country mean. Survey year 2025; income reference year 2024. Each rate is the share of people WITHIN the named income group living in overcrowded private households. Threshold: 60% of national median equivalised disposable income after social transfers; national relative thresholds are not a common cash line. Eurostat source categories are Above 60% (A_60) and Below 60% (B_60); no extra boundary convention is inferred.

Overcrowding uses household rooms and composition, not floor area, density, rent or homelessness. Collective/institutional households and people without private-household accommodation are generally outside EU-SILC coverage. Sampling uncertainty and compositional differences apply; no confidence intervals are supplied here, no significance ranking or causal claim is made.

CSV fields: geo, country, year, total_pct (all income), above_threshold_pct (A_60), below_threshold_pct (B_60), gap_pp (below minus above, percentage points), total_flag, above_flag, below_flag. Values and flags are unchanged. Lithuania p=provisional; Luxembourg b=break in time series. Reverse comparisons in Croatia and Lithuania are retained.

The public JSON-stat source is an explicitly MODIFIED EU-only subset, not the original API response. Original response SHA-256 and exact API query are in SOURCE_PROVENANCE.json; the original unmodified response remains in the private research archive.

Offline reproduction: unpack into an empty directory and run python3 reproduce.py --out reproduced. This standard-library command decodes the saved EU-only JSON-stat source and rebuilds chart-data.csv and chart-data.json. Optional --render-png rebuilds both SVG and PNG layouts using an existing Python environment with matplotlib/Pillow and rsvg-convert; no installation or network is attempted. Rendering was tested on the Mac mini with /usr/bin/python3, matplotlib 3.9.4 and Pillow 10.4.0. SVGs retain selectable text and accessible names. Original final rendering code is included.

See SOURCE_TERMS.txt for attribution and the required non-responsibility notice. Meplar made the selection, gap calculations and chart. Eurostat is not responsible for them.
