Ny visualisering: hvem eier egentlig boligen din? SSB-data 2015–2024

Tre diagrammer basert på SSB-tabellene 14068, 14059 og 14065:
- Kakediagram: 34 % eier fritt, 38 % eier med banklån, 28 % leier
- Stablet stolpe: gjeldsbyrde over tid (lån >3M tredoblet seg)
- Horisontal stablet: eierskap etter husholdningstype (65 % av unge leier)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ole-Morten Duesund 2026-03-16 19:52:47 +01:00
commit 4f82236b8b
4 changed files with 491 additions and 0 deletions

View file

@ -27,6 +27,7 @@ Each calculator directory contains two files following the same pattern:
- **`public/bolig/`** — Housing leverage: same price growth, different starting prices. 85% LTV amplifies equity gap ~6.67×. Model: `Equity = Price × (1+g)^n - Loan` - **`public/bolig/`** — Housing leverage: same price growth, different starting prices. 85% LTV amplifies equity gap ~6.67×. Model: `Equity = Price × (1+g)^n - Loan`
- **`public/arv/`** — Inheritance gap: lump sum + equal savings, gap never closes. Model: `Gap = Arv × (1+r)^n`. Has percentage y-axis chart. - **`public/arv/`** — Inheritance gap: lump sum + equal savings, gap never closes. Model: `Gap = Arv × (1+r)^n`. Has percentage y-axis chart.
- **`public/lonnsutvikling/`** — Data-driven visualization (not a calculator): real SSB wage data showing how equal percentage growth translates to vastly different kroner amounts across occupations. No sliders — hard-coded SSB table 11418 data (20162025). - **`public/lonnsutvikling/`** — Data-driven visualization (not a calculator): real SSB wage data showing how equal percentage growth translates to vastly different kroner amounts across occupations. No sliders — hard-coded SSB table 11418 data (20162025).
- **`public/boligeierskap/`** — Data-driven visualization: who really owns Norwegian housing? Three charts: doughnut (own outright / own with bank / rent), stacked bar (loan size distribution over time), horizontal stacked bar (ownership by household type). SSB tables 14068, 14059, 14065 data (20152024).
**External dependencies** (loaded via CDN, no install needed): Chart.js 4.4.1, Google Fonts (Fraunces + DM Sans). **External dependencies** (loaded via CDN, no install needed): Chart.js 4.4.1, Google Fonts (Fraunces + DM Sans).

248
public/boligeierskap/app.js Normal file
View file

@ -0,0 +1,248 @@
// SSB data: Boligeierskap og boligøkonomi
// Tabell 14068: Boligeierskap etter husholdningstype (prosent)
// Tabell 14059: Boligøkonomi etter eierstatus (gjeldsstørrelse)
// Tabell 14065: Boliglån og boligutgifter (gjeld vs verdi)
// Hentet 2026-03-16 via SSB PxWeb API v2
// --- Data ---
// Eierskap alle husholdninger 2024 (tabell 14068):
// Selveier 57.5%, Andelseier 14.8%, Leier 27.7%
// Total eiere = 72.3%
// Av eiere uten boliglån: 47.6% (tabell 14059, 2024)
// Eier fritt = 72.3 × 0.476 = 34.4%
// Eier med lån = 72.3 × 0.524 = 37.9%
// Gjeldsstørrelse blant eiere med lån (tabell 14059, "I alt")
const YEARS = ['2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024'];
const LOAN_DIST = {
under1M: [17.2, 15.3, 13.9, 13.5, 13.2, 12.7, 13.6, 12.4, 11.7, 12.1],
from1to2M:[17.0, 16.8, 16.2, 15.1, 14.9, 14.9, 14.2, 14.8, 14.4, 14.8],
from2to3M:[ 8.2, 9.7, 10.0, 9.7, 10.3, 10.5, 12.1, 12.1, 11.9, 11.8],
over3M: [ 4.5, 5.1, 6.2, 6.8, 8.1, 8.9, 10.9, 12.0, 12.2, 13.8]
};
// Eierskap etter husholdningstype 2024 (tabell 14068)
const HOUSEHOLD_TYPES = [
{ name: 'Aleneboende 1644', selveier: 20.7, andel: 13.8, leier: 65.5 },
{ name: 'Par uten barn 1644', selveier: 41.6, andel: 21.8, leier: 36.6 },
{ name: 'Enslige forsørgere 017', selveier: 50.1, andel: 11.6, leier: 38.3 },
{ name: 'Aleneboende 4566', selveier: 54.7, andel: 17.2, leier: 28.1 },
{ name: 'Aleneboende 67+', selveier: 60.0, andel: 23.0, leier: 17.0 },
{ name: 'Par med barn 06', selveier: 70.8, andel: 12.1, leier: 17.1 },
{ name: 'Par uten barn 67+', selveier: 78.7, andel: 15.2, leier: 6.1 },
{ name: 'Par med barn 717', selveier: 82.9, andel: 8.2, leier: 8.8 },
{ name: 'Par uten barn 4566', selveier: 82.2, andel: 11.6, leier: 6.1 },
{ name: 'Par med barn 18+', selveier: 87.7, andel: 6.8, leier: 5.6 },
];
// --- Formattering ---
function fmtPct(n) {
return n.toLocaleString('nb-NO', { minimumFractionDigits: 1, maximumFractionDigits: 1 }) + '\u202f%';
}
const GRID_COLOR = 'rgba(0,0,0,0.06)';
const TICK_COLOR = '#8a857e';
function baseOpts() {
return {
responsive: true, maintainAspectRatio: false,
plugins: {
legend: { display: false },
tooltip: {
backgroundColor: '#1a1714',
titleColor: '#f5f2eb',
bodyColor: 'rgba(245,242,235,0.7)',
padding: 10,
cornerRadius: 4,
titleFont: { family: 'DM Sans', size: 12 },
bodyFont: { family: 'DM Sans', size: 12 }
}
},
scales: {
x: {
ticks: { color: TICK_COLOR, font: { size: 11, family: 'DM Sans' }, maxRotation: 0 },
grid: { display: false },
border: { color: 'rgba(0,0,0,0.1)' }
},
y: {
ticks: { color: TICK_COLOR, font: { size: 11, family: 'DM Sans' }, callback: v => v + ' %' },
grid: { color: GRID_COLOR },
border: { dash: [3, 3], color: 'transparent' }
}
}
};
}
// --- Diagram 1: Kakediagram (doughnut) ---
new Chart(document.getElementById('chart1'), {
type: 'doughnut',
data: {
labels: ['Eier fritt (34 %)', 'Eier med lån (38 %)', 'Leier (28 %)'],
datasets: [{
data: [34.4, 37.9, 27.7],
backgroundColor: ['#2c6e49', '#1a4a8a', '#c0392b'],
borderColor: '#fff',
borderWidth: 3,
hoverOffset: 8
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
cutout: '55%',
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
label: function(c) {
return ' ' + c.label + ': ' + fmtPct(c.parsed);
}
},
backgroundColor: '#1a1714',
titleColor: '#f5f2eb',
bodyColor: 'rgba(245,242,235,0.7)',
padding: 10,
cornerRadius: 4,
titleFont: { family: 'DM Sans', size: 12 },
bodyFont: { family: 'DM Sans', size: 12 }
}
}
}
});
// --- Diagram 2: Gjeldsbyrde over tid (stablet stolpe) ---
var chart2Opts = baseOpts();
chart2Opts.scales.y.stacked = true;
chart2Opts.scales.x.stacked = true;
chart2Opts.scales.y.max = 55;
chart2Opts.plugins.tooltip = {
mode: 'index',
callbacks: {
label: function(c) {
return ' ' + c.dataset.label + ': ' + fmtPct(c.parsed.y);
}
},
backgroundColor: '#1a1714',
titleColor: '#f5f2eb',
bodyColor: 'rgba(245,242,235,0.7)',
padding: 10,
cornerRadius: 4,
titleFont: { family: 'DM Sans', size: 12 },
bodyFont: { family: 'DM Sans', size: 12 }
};
new Chart(document.getElementById('chart2'), {
type: 'bar',
data: {
labels: YEARS,
datasets: [
{
label: 'Under 1 mill',
data: LOAN_DIST.under1M,
backgroundColor: '#27ae60cc',
borderColor: '#27ae60',
borderWidth: 1,
borderRadius: 1
},
{
label: '12 mill',
data: LOAN_DIST.from1to2M,
backgroundColor: '#e67e22cc',
borderColor: '#e67e22',
borderWidth: 1,
borderRadius: 1
},
{
label: '23 mill',
data: LOAN_DIST.from2to3M,
backgroundColor: '#e74c3ccc',
borderColor: '#e74c3c',
borderWidth: 1,
borderRadius: 1
},
{
label: 'Over 3 mill',
data: LOAN_DIST.over3M,
backgroundColor: '#8b1a1acc',
borderColor: '#8b1a1a',
borderWidth: 1,
borderRadius: 1
}
]
},
options: chart2Opts
});
// --- Diagram 3: Eierskap etter livssituasjon (horisontal stablet) ---
var chart3Opts = baseOpts();
chart3Opts.indexAxis = 'y';
chart3Opts.scales = {
x: {
stacked: true,
max: 100,
ticks: { color: TICK_COLOR, font: { size: 11, family: 'DM Sans' }, callback: v => v + ' %' },
grid: { color: GRID_COLOR },
border: { dash: [3, 3], color: 'transparent' }
},
y: {
stacked: true,
ticks: { color: TICK_COLOR, font: { size: 11, family: 'DM Sans' }, autoSkip: false },
grid: { display: false },
border: { color: 'rgba(0,0,0,0.1)' }
}
};
chart3Opts.plugins.tooltip = {
mode: 'index',
callbacks: {
label: function(c) {
return ' ' + c.dataset.label + ': ' + fmtPct(c.parsed.x);
}
},
backgroundColor: '#1a1714',
titleColor: '#f5f2eb',
bodyColor: 'rgba(245,242,235,0.7)',
padding: 10,
cornerRadius: 4,
titleFont: { family: 'DM Sans', size: 12 },
bodyFont: { family: 'DM Sans', size: 12 }
};
new Chart(document.getElementById('chart3'), {
type: 'bar',
data: {
labels: HOUSEHOLD_TYPES.map(h => h.name),
datasets: [
{
label: 'Selveier',
data: HOUSEHOLD_TYPES.map(h => h.selveier),
backgroundColor: '#2c6e49cc',
borderColor: '#2c6e49',
borderWidth: 1,
borderRadius: 2
},
{
label: 'Andelseier',
data: HOUSEHOLD_TYPES.map(h => h.andel),
backgroundColor: '#1a4a8acc',
borderColor: '#1a4a8a',
borderWidth: 1,
borderRadius: 2
},
{
label: 'Leier',
data: HOUSEHOLD_TYPES.map(h => h.leier),
backgroundColor: '#c0392bcc',
borderColor: '#c0392b',
borderWidth: 1,
borderRadius: 2
}
]
},
options: chart3Opts
});

View file

@ -0,0 +1,236 @@
<!DOCTYPE html>
<html lang="nb">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hvem eier boligen din? — SSB-data 20152024</title>
<meta property="og:type" content="website">
<meta property="og:locale" content="nb_NO">
<meta property="og:site_name" content="Forskjeller">
<meta property="og:title" content="Hvem eier boligen din?">
<meta property="og:description" content="Over halvparten av norske «boligeiere» har boliglån. I snitt eier banken 43 % av boligen. 28 % leier. Reelle SSB-tall.">
<meta property="og:url" content="https://forskjeller.naiv.no/boligeierskap/">
<meta name="twitter:card" content="summary">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300;0,9..144,600;1,9..144,300&family=DM+Sans:wght@300;400;500&display=swap" rel="stylesheet">
<link rel="stylesheet" href="../style.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.1/chart.umd.js"></script>
<script async src="/implausibly/js/pa-hrD38igEdOJ7wP3NdA40I.js"></script>
<script>
window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};
plausible.init({ endpoint: "/implausibly/api/event" })
</script>
<style>
.source-strip {
text-align: center;
padding: 0.75rem 1rem;
font-size: 12px;
color: var(--ink3);
background: var(--bg2);
border-bottom: 1px solid var(--border);
}
.source-strip a { color: var(--ink3); text-decoration: underline; }
.three-stats {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 10px;
margin-bottom: 2.5rem;
}
@media (max-width: 480px) {
.three-stats { grid-template-columns: 1fr; }
}
.three-stat {
background: var(--bg2);
border: 1px solid var(--border);
border-radius: 6px;
padding: 1.25rem;
text-align: center;
}
.three-stat .ts-pct {
font-family: 'Fraunces', serif;
font-size: clamp(2rem, 5vw, 2.8rem);
font-weight: 600;
line-height: 1.1;
}
.three-stat .ts-label {
font-size: 0.85rem;
color: var(--ink2);
margin-top: 0.3rem;
}
.three-stat .ts-sub {
font-size: 12px;
color: var(--ink3);
margin-top: 0.15rem;
}
.key-number {
text-align: center;
padding: 2rem 1rem;
margin-bottom: 2.5rem;
}
.key-number .kn-value {
font-family: 'Fraunces', serif;
font-size: clamp(2.5rem, 7vw, 4rem);
font-weight: 600;
color: var(--accent);
line-height: 1.1;
}
.key-number .kn-label {
font-size: 1rem;
color: var(--ink2);
margin-top: 0.5rem;
max-width: 540px;
margin-left: auto;
margin-right: auto;
}
.h-300 { height: 300px; }
@media (max-width: 480px) {
.h-300 { height: 250px; }
}
</style>
</head>
<body>
<header>
<p class="eyebrow">SSB-data 20152024</p>
<h1>Hvem eier<br><em>boligen din?</em></h1>
<p class="lead">Over halvparten av norske «boligeiere» har boliglån. I snitt eier banken 43 % av boligens verdi. Og 28 % leier.</p>
<div class="stamp">Boligdrømmen</div>
</header>
<div class="source-strip">
Data: <a href="https://www.ssb.no/statbank/table/14068/" target="_blank" rel="noopener">SSB tabell 14068</a>,
<a href="https://www.ssb.no/statbank/table/14059/" target="_blank" rel="noopener">14059</a>,
<a href="https://www.ssb.no/statbank/table/14065/" target="_blank" rel="noopener">14065</a>
— Boligeierskap og boligøkonomi, husholdninger
</div>
<main>
<!-- Nøkkeltall -->
<div class="key-number">
<div class="kn-value">43 % er bankens</div>
<div class="kn-label">For norske boligeiere med lån er gjennomsnittlig gjeld 2,2 millioner kr — mens boligen er verdt 5,0 millioner. Banken «eier» nesten halvparten.</div>
</div>
<!-- Tre virkeligheter -->
<div class="three-stats">
<div class="three-stat">
<div class="ts-pct" style="color:#2c6e49;">34 %</div>
<div class="ts-label">Eier fritt</div>
<div class="ts-sub">Har betalt ned boliglånet</div>
</div>
<div class="three-stat">
<div class="ts-pct" style="color:#1a4a8a;">38 %</div>
<div class="ts-label">Eier med banken</div>
<div class="ts-sub">Har boliglån — banken eier en del</div>
</div>
<div class="three-stat">
<div class="ts-pct" style="color:#c0392b;">28 %</div>
<div class="ts-label">Leier</div>
<div class="ts-sub">Bygger ingen egenkapital</div>
</div>
</div>
<!-- Diagram 1: Kakediagram -->
<div class="chart-section">
<div class="chart-header">
<div>
<div class="chart-title">Tre virkeligheter</div>
<div class="chart-desc">Norske husholdninger fordelt etter reelt eierskap, 2024</div>
</div>
<div class="legend">
<span><span class="swatch" style="background:#2c6e49;"></span>Eier fritt</span>
<span><span class="swatch" style="background:#1a4a8a;"></span>Eier med lån</span>
<span><span class="swatch" style="background:#c0392b;"></span>Leier</span>
</div>
</div>
<div class="chart-wrap h-300"><canvas id="chart1"></canvas></div>
</div>
<div class="insight">
Vi snakker ofte om at «8 av 10 nordmenn eier bolig». Men bare <strong>1 av 3 eier fritt</strong> — uten boliglån.
De andre 38 % deler eierskapet med banken, som i snitt sitter på 43 % av boligens verdi.
Og nesten <strong>3 av 10 leier</strong> — de bygger ingen egenkapital i det hele tatt.
</div>
<!-- Diagram 2: Gjeldsbyrde over tid -->
<div class="chart-section">
<div class="chart-header">
<div>
<div class="chart-title">Gjelden vokser</div>
<div class="chart-desc">Fordeling av boliglånsstørrelse blant eiere, 20152024</div>
</div>
<div class="legend">
<span><span class="swatch" style="background:#27ae60;"></span>Under 1 mill</span>
<span><span class="swatch" style="background:#e67e22;"></span>12 mill</span>
<span><span class="swatch" style="background:#e74c3c;"></span>23 mill</span>
<span><span class="swatch" style="background:#8b1a1a;"></span>Over 3 mill</span>
</div>
</div>
<div class="chart-wrap h-240"><canvas id="chart2"></canvas></div>
</div>
<div class="insight">
Andelen boligeiere med lån over 3 millioner har <strong>tredoblet seg</strong> på ti år:
fra 4,5 % i 2015 til 13,8 % i 2024. Samtidig krymper gruppen med små lån.
Nordmenn skylder stadig mer — og banken eier en stadig større del av boligene våre.
</div>
<!-- Diagram 3: Eierskap etter livssituasjon -->
<div class="chart-section">
<div class="chart-header">
<div>
<div class="chart-title">Alder avgjør</div>
<div class="chart-desc">Eierskap etter husholdningstype, 2024</div>
</div>
<div class="legend">
<span><span class="swatch" style="background:#2c6e49;"></span>Selveier</span>
<span><span class="swatch" style="background:#1a4a8a;"></span>Andelseier</span>
<span><span class="swatch" style="background:#c0392b;"></span>Leier</span>
</div>
</div>
<div class="chart-wrap" style="height:360px;"><canvas id="chart3"></canvas></div>
</div>
<div class="insight">
<strong>2 av 3 unge aleneboende leier.</strong> Blant par i alderen 4566 eier over 90 % sin bolig.
Boligmarkedet er et generasjonsskille: de som kom inn tidlig, bygger formue —
de som ikke kom inn, betaler andres boliglån gjennom husleie.
</div>
<!-- Forklaring -->
<div class="explainer">
<h3>Hvorfor er dette viktig?</h3>
<p>Norge har en av verdens høyeste boligeierandeler — men <strong>eierskap er ikke det samme som formue</strong>.
En husholdning med 4 millioner i boliggjeld og en bolig verdt 5 millioner har bare 1 million i reell egenkapital.
Resten «eier» banken.</p>
<div class="formula-box">
Boligverdi: <span>5 000 000 kr</span><br>
Gjenstående lån: <span>2 200 000 kr</span><br>
Din egenkapital: <span>2 800 000 kr (56 %)</span><br>
Bankens andel: <span>2 200 000 kr (44 %)</span>
</div>
<p>For leiere er situasjonen enda verre: hver krone i husleie forsvinner. Ingen egenkapital bygges opp.
Mens boligeiere — selv de med lån — i det minste får med seg verdiøkningen.</p>
<p>Tallene viser også et tydelig <strong>generasjonsskille</strong>: 65 % av unge aleneboende leier,
mens nesten 90 % av par med voksne barn eier. Den «norske boligdrømmen» er i praksis
forbeholdt de som allerede har kommet inn på markedet — eller arvet seg inn.</p>
<p>Data er hentet fra SSB levekårsundersøkelsen
(<a href="https://www.ssb.no/statbank/table/14068/" target="_blank" rel="noopener">tabell 14068</a>,
<a href="https://www.ssb.no/statbank/table/14059/" target="_blank" rel="noopener">14059</a>,
<a href="https://www.ssb.no/statbank/table/14065/" target="_blank" rel="noopener">14065</a>).
«Eier fritt» er beregnet som andelen eiere × andelen uten boliglån.</p>
</div>
</main>
<footer>
<a href="../">&larr; Alle visualiseringer</a> · Kilde: SSB tabeller 14068, 14059, 14065 · Laget med Chart.js · <a href="https://kode.naiv.no/olemd/forskjeller.naiv.no">Kildekode</a>
</footer>
<script src="app.js"></script>
</body>
</html>

View file

@ -181,6 +181,12 @@
<span class="arrow">Se visualiseringen &rarr;</span> <span class="arrow">Se visualiseringen &rarr;</span>
</a> </a>
<a href="boligeierskap/" class="topic-card">
<h2>Hvem eier boligen din?</h2>
<p>Bare 1 av 3 eier boligen fritt. 38 % deler eierskapet med banken, og 28 % leier. Unge aleneboende? 2 av 3 leier. Reelle SSB-tall.</p>
<span class="arrow">Se visualiseringen &rarr;</span>
</a>
</div> </div>
</main> </main>