Alle beregninger er baseret på materiale i Statistikbanken
Den fremtidige befolkning
Hovedresultater
Hele landet
Befolkningsfremskrivningen viser resultater af modelberegninger, der, med udgangspunkt i Grønlands befolknings køns- og aldersstruktur pr. 1. januar 2026 samt historiske erfaringer, beskriver mulige udviklingsscenarier frem mod 2050.
Antallet af personer, der bor og er født i Grønland, vil ifølge Hovedalternativet falde med en 14 pct. frem mod 2050.
Som de øvrige alternativer fremskrives kun den del af befolkningen, der bor og er født i Grønland. Den del af befolkningen, der er født uden for Grønland, antages i alle årene fremover at forblive konstant med samme køns- og aldersfordeling som i 2026.
De store årgange fra 1960’erne vil i de kommende år nå aldre med højere dødelighed, som dog forventes at være lavere end den dødelighed, tidligere fødselsårgange oplevede i samme alder. Befolkningens gennemsnitsalder stiger fra 35.9 i 2026 til 39.5 i 2050.
Mens der for 10 år siden blev født omkring 800 børn årligt, forventes der om 10 år, med den nuværende lave fertilitet, at blive født under 600 børn årligt.
På grund af den modsatrettede udvikling for henholdsvis børn og ældre vil den demografiske forsørgerbrøk ikke være større eller mindre end det, der er blevet observeret i de seneste 40 år.
I figur 2 sammenlignes aldersfordelingen i de 4 fremskrivninger i årene 2000 til 2050. Forskellene ses tydeligst for børn, unge og ældre. Animationen går lidt hurtigt, men alle tal kan hentes i Grønlands Statistikbank, hvor der findes 5 detaljerede tabeller:
Når befolkningen opdeles i regioner, øges usikkerheden i de demografiske beregninger betydeligt. Kun for Nuuk og muligvis de største hovedbosteder er det muligt at foretage beregninger med den anvendte metode. For mindre lokaliteter er befolkningstallet ofte for lille til at give pålidelige resultater over en længere tidshorisont end få år.
Statistikbanken tilbyder alligevel detaljerede beregningsresultater, for at støtte mange anvendelsesmuligheder, hvor man efter behov kan summere resultater på 1-års aldersgrupper til selvdefinerede aldersintervaller frem for at være begrænset af faste grupperinger. Fremskrivningerne er mere præcise, jo bredere aldersintervaller der anvendes.
Hovedscenariet i fremskrivningen forudsætter et fortsat fald i fertiliteten, faldende dødelighed og en relativ høj nettoudvandring. Beregningerne tager udgangspunkt i de seneste års niveauer og udvikling, herunder også de indenlandske flyttemønstre.
I figur 3 illustreres udviklingen i andelen af den grønlandskfødte befolkning fordelt på kommuner, fra år 1999 til 2050.
Kildekode
---title: Folketal i fremtidensubtitle: ""tag: - pop_futuretoc: truetoc-title: Folketallang: daexecute: echo: false warning: false---```{r}options(scipen =999)library(tidyverse)library(janitor)library(kableExtra)library(highcharter)library(htmltools)library(htmlwidgets)library(jsonlite)library(statgl)library(pxmake)#use_bank <- "http://testbank.stat.gl/api/v1/en/Greenland"use_bank <-"https://bank.stat.gl/api/v1/en/Greenland"baseYear <-2026LhorizonYear <-2050Laar <-"26"```\Alle beregninger er baseret på materiale i Statistikbanken\## Den fremtidige befolkning### Hovedresultater#### Hele landet```{r}ave_age <-statgl_fetch(statgl_url(paste0("BEXP",aar), lang="da", api_url = use_bank),p_prefix="main",pob="N",age=px_all(),.eliminate_rest =TRUE,.val_code =TRUE,.col_code =TRUE) %>%clean_names() %>%select(-p_prefix, - pob) %>%group_by(time) %>%summarise(average_age =round(sum(as.integer(age) * value) /sum(value), 1))```Befolkningsfremskrivningen viser resultater af modelberegninger, der, med udgangspunkt i Grønlands befolknings køns- og aldersstruktur pr. 1. januar `r baseYear` samt historiske erfaringer, beskriver mulige udviklingsscenarier frem mod `r horizonYear`.Antallet af personer, der bor og er født i Grønland, vil ifølge Hovedalternativet falde med en 14 pct. frem mod `r horizonYear`.Som de øvrige alternativer fremskrives kun den del af befolkningen, der bor og er født i Grønland. Den del af befolkningen, der er født uden for Grønland, antages i alle årene fremover at forblive konstant med samme køns- og aldersfordeling som i `r baseYear`.```{r}text_fut_calc <-tribble(~ component, ~ component_txt,"T1", "Primo året","N", "Født i Grønland","B", "Levendefødte","D", "Dødsfald","O", "Udvandrede","I", "Indvandrede","S", "Født i Danmark/Færøerne","A", "Født udenfor Rigsfællesskabet","T2", "Ultimo året", )fut_calc <-statgl_fetch(statgl_url(paste0("BEXP",aar,"CALC"), lang="da", api_url = use_bank), time=c(baseYear-5,baseYear,baseYear+5,baseYear+10,baseYear+15,baseYear+20,baseYear+24),p_prefix="main",component=px_all(),.eliminate_rest =TRUE,.val_code =TRUE,.col_code =TRUE) %>%clean_names() %>%select(-p_prefix) %>%filter(component %in%c("N","S","A","D","B","I","O")) %>%pivot_wider(names_from = component, values_from = value) %>%mutate(T1=N+S+A,T2=T1+B-D-O+I) %>%select(time,T1,N,B,D,O,I,S,A,T2) %>%pivot_longer(cols =c(T1, N, B, D, O, I, S, A, T2), names_to ="component", values_to ="value") %>%left_join(text_fut_calc) %>%select(-component)fut_calc %>%select(time, value, component_txt) %>%pivot_wider(names_from = time, values_from = value) %>%statgl_table(.replace_0s=TRUE, .big.mark =TRUE)# title = gt::md("Tabel 1. Befolkningsregnskab"),# subtitle = gt::md("udvalgte år")````r paste0("[Se tabel i Statistikbanken](https://bank.stat.gl/bedp",aar,"calc)")`De store årgange fra 1960'erne vil i de kommende år nå aldre med højere dødelighed, som dog forventes at være lavere end den dødelighed, tidligere fødselsårgange oplevede i samme alder. Befolkningens gennemsnitsalder stiger fra `r ave_age %>% filter(time==baseYear) %>% pull(average_age)` i `r baseYear` til `r ave_age %>% filter(time==horizonYear) %>% pull(average_age)` i `r horizonYear`.Mens der for 10 år siden blev født omkring 800 børn årligt, forventes der om 10 år, med den nuværende lave fertilitet, at blive født under 600 børn årligt.På grund af den modsatrettede udvikling for henholdsvis børn og ældre vil den demografiske forsørgerbrøk ikke være større eller mindre end det, der er blevet observeret i de seneste 40 år.```{r}dem_depen_raw <-statgl_fetch(statgl_url("BEXSTA", api_url = use_bank), age =px_all(), "place of birth"="N", .val_code =TRUE, .col_code =TRUE, .eliminate_rest =TRUE) %>%clean_names() %>%drop_na(value) %>%mutate(time=strtoi(time),age =strtoi(age),age =ifelse(age<18,0,ifelse(age>=67,67,18))) %>%filter(time>=1979& time<2000) %>%group_by(time,age) %>%summarise(value=sum(value), .groups ='drop') %>%pivot_wider(names_from = age, names_prefix ="age", values_from = value) %>%mutate(value=(age0+age67)/age18) %>%select(time,value) %>%unnest() %>%as_tibble()alternatives <-tribble(~ p_prefix,~ version_txt,"main", "Hovedalternativ","alt1", "Uændret dødelighed","alt2", "Lav udvandring","alt3", "Høj fertilitet",# "alt4", "2020 fremskrivning",# "alt5", "2020 dødelighed",# "alt6", "2024 alt6",# "alt7", "2024 alt7",# "alt8", "2024 alt8", )# alternatives <- tribble(~ p_prefix,~ version_txt,# "main", "Main alternative",# "alt1", "Unchanged mortality",# "alt2", "Low emigration",# "alt3", "High fertility",# "alt4", "2020 version",# "alt4", "2020 fremskrivning",)# alternatives <- tribble(~ p_prefix,~ version_txt,# "main", "Ilimagilluinnagaq",# "alt1", "Toqusartut nikissimanngippata",# "alt2", "Kalaallit Nunaannit nuuttartut ikittuugaangata",# "alt3", "Amerlasuunik meeqqiortoqartillugu",# "alt4", "2020 version",# "alt4", "2020 fremskrivning",)dem_depen_pre <- alternatives %>%cross_join(dem_depen_raw) %>%select(-version_txt) %>%as_tibble()dem_depen <-statgl_fetch(statgl_url(paste0("BEXP",aar), api_url = use_bank), area ="ALL", p_prefix=px_all(), age =px_all(), pob ="N", .val_code =TRUE, .col_code =TRUE, .eliminate_rest =TRUE) %>%clean_names() %>%mutate(time=strtoi(time),age =strtoi(age),age =ifelse(age<18,0,ifelse(age>=67,67,18))) %>%group_by(p_prefix,time,age) %>%summarise(value=sum(value), .groups ='drop') %>%pivot_wider(names_from = age, names_prefix ="age", values_from = value) %>%mutate(value=(age0+age67)/age18) %>%select(p_prefix,time,value) %>%unnest(cols =c()) %>%as_tibble() %>%bind_rows(dem_depen_pre)dem_depen %>%left_join(alternatives, by ="p_prefix") %>%arrange(version_txt, time) %>%statgl_plot(x=time,y=value,group = version_txt,# title = paste0("Pilersuisussanik naatsorsuinerit, 1979 – ",horizonYear),# title = paste0("Dependency ratio, 1979 - ",horizonYear),title =paste0("Demografisk forsørgerbrøk, 1979 - ",horizonYear),# subtitle = "Pilersuisut 18-66-inik ukiullit",subtitle ="Forsørgere i alderen 18-66 år",# subtitle = "working-age population, aged 18-66 years",# ylab = "annertussut",# ylab = "ratio",ylab ="andel",show_last_value =FALSE,)````r paste0("[Se tabel i Statistikbanken](https://bank.stat.gl/bedp",aar,")")````{r}# -------------------------------------------------------------------# 1) Fetch + clean# -------------------------------------------------------------------df <-statgl_fetch(statgl_url(paste0("BEXP", aar), lang ="da", api_url = use_bank),p_prefix =px_all(),area ="ALL",sex ="T",pob =c("N", "S", "A"),age =px_all(),.val_code =FALSE,.col_code =TRUE) %>%clean_names() %>%mutate(age =strtoi(age),time =strtoi(time),value =ifelse(is.na(value), 0, value) ) %>%select(time, pob, p_prefix, age, value) %>%arrange(time, pob, p_prefix, age)years <-sort(unique(df$time))pobs <-sort(unique(df$pob))# -------------------------------------------------------------------# 1b) Initial year should be baseYear (if available)# Assumes baseYear is defined earlier in your .qmd# -------------------------------------------------------------------init_year <-if (baseYear %in% years) {as.character(baseYear)} else {as.character(years[1])}# -------------------------------------------------------------------# 2) Common y-axis with fixed tick interval = 250# -------------------------------------------------------------------tick_int <-250y_min <-0y_max_raw <-max(df$value, na.rm =TRUE)y_max <-ceiling(y_max_raw / tick_int) * tick_int# -------------------------------------------------------------------# 3) Fixed colors per p_prefix (same across all charts)# -------------------------------------------------------------------pfx <-sort(unique(df$p_prefix))hc_palette <-c("#7cb5ec","#434348","#90ed7d","#f7a35c","#8085e9","#f15c80","#e4d354","#2b908f","#f45b5b","#91e8e1","#2f7ed8","#0d233a","#8bbc21","#910000","#1aadce","#492970","#f28f43","#77a1e5","#c42525","#a6c96a")if (length(pfx) >length(hc_palette)) hc_palette <-rep(hc_palette, length.out =length(pfx))color_map <-setNames(hc_palette[seq_along(pfx)], pfx)# -------------------------------------------------------------------# 4) Pack data to JS: data[pob][year][p_prefix] = [[age,value], ...]# -------------------------------------------------------------------payload <- df %>%group_by(pob, time, p_prefix) %>%summarise(data =list(purrr::map2(age, value, ~list(.x, .y))), .groups ="drop") %>%group_by(pob, time) %>%summarise(series =list(split(data, p_prefix) |>lapply(\(x) x[[1]])), .groups ="drop") %>%group_by(pob) %>%summarise(by_year =list(split(series, time)), .groups ="drop")store_list <-setNames(vector("list", length(pobs)), pobs)for (i inseq_len(nrow(payload))) { pob_i <- payload$pob[i] by_year <- payload$by_year[[i]] store_list[[pob_i]] <-lapply(names(by_year), function(y) by_year[[y]][[1]])names(store_list[[pob_i]]) <-names(by_year)}js_payload <-list(years = years,pobs = pobs,data = store_list,colors =as.list(color_map),pfx = pfx)make_series_list <-function(pob, year_chr) { s <- js_payload$data[[pob]][[year_chr]]lapply(names(s), function(nm) list(name = nm, data = s[[nm]], color = color_map[[nm]]))}# -------------------------------------------------------------------# 5) Build charts (no title/subtitle; only left y-axis labels)# Also: remove "Values" on hidden y-axes by setting title text=""# -------------------------------------------------------------------make_one_chart <-function(pob, show_yaxis =FALSE) {highchart() %>%hc_chart(type ="line", animation =list(duration =350), spacingTop =5) %>%hc_title(text =NULL) %>%hc_subtitle(text =NULL) %>%hc_xAxis(title =list(text ="alder"), allowDecimals =FALSE) %>%hc_yAxis(title =if (show_yaxis) list(text ="antal personer") elselist(text =""),min = y_min,max = y_max,tickInterval = tick_int,startOnTick =FALSE,endOnTick =FALSE,labels =list(enabled = show_yaxis),showFirstLabel = show_yaxis,showLastLabel = show_yaxis ) %>%hc_tooltip(shared =TRUE, valueDecimals =0) %>%hc_plotOptions(series =list(marker =list(enabled =FALSE), lineWidth =2)) %>%hc_legend(enabled =FALSE) %>%hc_add_series_list(make_series_list(pob, init_year))}hc_left <-make_one_chart(pobs[1], show_yaxis =TRUE)hc_mid <-make_one_chart(pobs[2], show_yaxis =FALSE)hc_right <-make_one_chart(pobs[3], show_yaxis =FALSE)# -------------------------------------------------------------------# 6) UI (dropdown built in R) - select init_year at load# -------------------------------------------------------------------year_options <-lapply(years, function(y) {if (as.character(y) == init_year) { tags$option(value =as.character(y), as.character(y), selected ="selected") } else { tags$option(value =as.character(y), as.character(y)) }})ui <- tags$div(style ="display:flex; gap:18px; align-items:center; margin-bottom:10px; flex-wrap:wrap;", tags$div( tags$span("År: "), tags$select(id ="statgl_year_sel", year_options) ), tags$button(id ="statgl_play_btn", type ="button", "Play"), tags$div(style ="display:flex; gap:12px; align-items:center; flex-wrap:wrap;", tags$span("Hastighed:"), tags$label(style ="display:inline-flex; gap:6px; align-items:center;", tags$input(type ="radio", name ="statgl_speed", value ="700", checked =NA),"Normal" ), tags$label(style ="display:inline-flex; gap:6px; align-items:center;", tags$input(type ="radio", name ="statgl_speed", value ="400"),"Hurtigt" ), tags$label(style ="display:inline-flex; gap:6px; align-items:center;", tags$input(type ="radio", name ="statgl_speed", value ="200"),"Dobbelt hurtigt" ) ))# -------------------------------------------------------------------# 7) Fixed-height facet headers (ONLY pob shown)# -------------------------------------------------------------------facet_header <-function(i, pob) { tags$div(class ="statgl_facet_header",style ="height:44px; display:flex; flex-direction:column; justify-content:center; padding:0 4px;", tags$div(style ="font-weight:600; line-height:1.1;", pob), tags$div(id =paste0("statgl_year_lbl_", i), style ="display:none;", "") )}legend_box <- tags$div(id ="statgl_shared_legend",style ="display:flex; flex-wrap:wrap; gap:10px 14px; margin-top:10px; align-items:center; user-select:none;")css <- tags$style(HTML("#statgl_shared_legend .item { cursor:pointer; display:flex; align-items:center; gap:6px; }#statgl_shared_legend .swatch { width:12px; height:12px; border-radius:2px; display:inline-block; }#statgl_shared_legend .off { opacity:.35; text-decoration:line-through; }"))wrap_chart <-function(wrapper_id, header_html, chart_widget) { tags$div(id = wrapper_id,style ="flex:1; min-width:0;", header_html, chart_widget )}# -------------------------------------------------------------------# 8) Attach ALL JS control logic via onRender() on the LEFT chart# - Only MID chart shows year as a large light-gray watermark# - Animation starts from selected init_year (baseYear when possible)# -------------------------------------------------------------------hc_left <- hc_left %>%onRender(paste0("function(el,x){"," const payload = ", toJSON(js_payload, auto_unbox =TRUE), ";"," const initYear = '", init_year, "';"," function findChartInWrapper(wrapperId){"," const w = document.getElementById(wrapperId);"," if(!w) return null;"," const charts = (window.Highcharts && Highcharts.charts) ? Highcharts.charts : [];"," for(let i=0;i<charts.length;i++){"," const c = charts[i];"," if(c && c.renderTo && w.contains(c.renderTo)) return c;"," }"," return null;"," }"," function boot(retries){"," const sel = document.getElementById('statgl_year_sel');"," const btn = document.getElementById('statgl_play_btn');"," const legend = document.getElementById('statgl_shared_legend');"," const c1 = findChartInWrapper('facet_left');"," const c2 = findChartInWrapper('facet_mid');"," const c3 = findChartInWrapper('facet_right');"," if(!sel || !btn || !legend || !c1 || !c2 || !c3){"," if(retries>0) return setTimeout(()=>boot(retries-1), 60);"," return;"," }"," const charts = [c1,c2,c3];"," if(!sel.value) sel.value = initYear;"," const vis = {}; payload.pfx.forEach(nm => vis[nm] = true);"," function normYearKey(v){ const n=parseInt(v,10); return String(n); }"," function getSeriesObj(pob, yearStr){"," const yk = normYearKey(yearStr);"," const obj = payload.data[pob] || {};"," return obj[yk] || obj[parseInt(yk,10)] || obj[yearStr] || null;"," }"," function applyVisState(chart){"," payload.pfx.forEach(nm => {"," const s = chart.series.find(ss => ss && ss.name === nm);"," if(s) s.setVisible(!!vis[nm], false);"," });"," }"," function updateYearWatermark(yearStr){"," const yk = normYearKey(yearStr);"," const mid = charts[1];"," if(mid.__yearWatermark){"," mid.__yearWatermark.destroy();"," mid.__yearWatermark = null;"," }"," const x = mid.plotLeft + mid.plotWidth * 0.5;"," const y = mid.plotTop + mid.plotHeight * 0.60;"," mid.__yearWatermark = mid.renderer"," .text(yk, x, y)"," .attr({ align: 'center', zIndex: 0 })"," .css({"," color: 'rgba(180,180,180,0.45)',"," fontSize: '72px',"," fontWeight: '600'"," })"," .add();"," }"," function updateAll(yearStr){"," const yk = normYearKey(yearStr);"," payload.pobs.forEach((pob, idx) => {"," const chart = charts[idx];"," const seriesObj = getSeriesObj(pob, yk);"," if(!seriesObj) return;"," const names = Object.keys(seriesObj);"," while(chart.series.length) chart.series[0].remove(false);"," names.forEach(nm => {"," chart.addSeries({ name:nm, data:seriesObj[nm], color: payload.colors[nm] }, false);"," });"," applyVisState(chart);"," chart.redraw();"," });"," updateYearWatermark(yk);"," }"," function buildLegend(){"," legend.innerHTML = '';"," payload.pfx.forEach(nm => {"," const item = document.createElement('div');"," item.className = 'item';"," const sw = document.createElement('span');"," sw.className = 'swatch';"," sw.style.background = payload.colors[nm] || '#999';"," const lab = document.createElement('span');"," lab.textContent = nm;"," item.appendChild(sw); item.appendChild(lab);"," item.addEventListener('click', ()=>{"," vis[nm] = !vis[nm];"," item.classList.toggle('off', !vis[nm]);"," charts.forEach(ch => {"," const s = ch.series.find(ss => ss && ss.name === nm);"," if(s) s.setVisible(!!vis[nm], false);"," });"," charts.forEach(ch => ch.redraw());"," });"," legend.appendChild(item);"," });"," }"," sel.addEventListener('change', ()=> updateAll(sel.value));"," let interval_ms = 700;"," let timer = null;"," const speedRadios = document.querySelectorAll('input[name=\"statgl_speed\"]');"," speedRadios.forEach(r => {"," r.addEventListener('change', ()=>{"," interval_ms = parseInt(r.value,10);"," if(timer){ clearInterval(timer); timer = setInterval(stepForward, interval_ms); }"," });"," });"," let idx = payload.years.indexOf(parseInt(sel.value,10));"," if(idx < 0){"," idx = payload.years.indexOf(parseInt(initYear,10));"," if(idx < 0) idx = 0;"," }"," function stepForward(){"," idx = (idx + 1) % payload.years.length;"," const y = String(payload.years[idx]);"," sel.value = y;"," updateAll(y);"," }"," btn.addEventListener('click', ()=>{"," if(timer){ clearInterval(timer); timer=null; btn.textContent='Play'; return; }"," btn.textContent='Pause';"," timer = setInterval(stepForward, interval_ms);"," });"," buildLegend();"," updateAll(sel.value);"," }"," boot(80);","}" ))# -------------------------------------------------------------------# 9) Build final grid with updated left chart# -------------------------------------------------------------------grid <- tags$div(id ="statgl_grid",style ="display:flex; gap:14px; align-items:stretch;",wrap_chart("facet_left", facet_header(1, pobs[1]), hc_left),wrap_chart("facet_mid", facet_header(2, pobs[2]), hc_mid),wrap_chart("facet_right", facet_header(3, pobs[3]), hc_right))browsable(tagList(ui, grid, legend_box, css))````r paste0("[Se tabel i Statistikbanken](https://bank.stat.gl/bedp",aar,")")`\I figur 2 sammenlignes aldersfordelingen i de 4 fremskrivninger i årene 2000 til 2050. Forskellene ses tydeligst for børn, unge og ældre. Animationen går lidt hurtigt, men alle tal kan hentes i Grønlands Statistikbank, hvor der findes 5 detaljerede tabeller:[Befolkningsfremskrivninger, 2026](https://bank.stat.gl/BEDP26)\[Befolkningsregnskab 1999 - 2050](https://bank.stat.gl/BEDP26CALC)\[Fertilitet 1999 - 2049](https://bank.stat.gl/BEDP26FERT)\[Dødelighed 1999 - 2049](https://bank.stat.gl/BEDP26MORT)\[Udvandringsrater 1999 - 2049](https://bank.stat.gl/BEDP26EMR)#### RegionerNår befolkningen opdeles i regioner, øges usikkerheden i de demografiske beregninger betydeligt. Kun for Nuuk og muligvis de største hovedbosteder er det muligt at foretage beregninger med den anvendte metode. For mindre lokaliteter er befolkningstallet ofte for lille til at give pålidelige resultater over en længere tidshorisont end få år.<br/><br/>Statistikbanken tilbyder alligevel detaljerede beregningsresultater, for at støtte mange anvendelsesmuligheder, hvor man efter behov kan summere resultater på 1-års aldersgrupper til selvdefinerede aldersintervaller frem for at være begrænset af faste grupperinger. Fremskrivningerne er mere præcise, jo bredere aldersintervaller der anvendes.<br/><br/>Hovedscenariet i fremskrivningen forudsætter et fortsat fald i fertiliteten, faldende dødelighed og en relativ høj nettoudvandring. Beregningerne tager udgangspunkt i de seneste års niveauer og udvikling, herunder også de indenlandske flyttemønstre.<br/><br/>I figur 3 illustreres udviklingen i andelen af den grønlandskfødte befolkning fordelt på kommuner, fra år 1999 til `r horizonYear`.\```{r}get_codelist <-function(table_id, langs =c("en", "kl", "da")) {enframe(langs, name =NULL, value ="langs") %>%mutate(try =map2_chr(table_id, langs, statgl_url) %>% purrr::map(statgl_meta) %>% purrr::map(pluck,"variables") ) %>%unnest(try) %>%unnest(c(values, valueTexts)) %>%select(variable = code,`variable-code`= text,code = values,language = langs,value = valueTexts) %>%group_by(variable,language) %>%mutate(order =row_number())}codelist_area <-get_codelist("BEXCALCR2") %>%filter(language=="da"& variable=="omr"& code %in%c("ALL","955","956","LP6","957","959","960")) %>%as.data.frame() %>%select(code,tekst=value)P24Rfig3 <-statgl_fetch(statgl_url("BEXP24", "en", api_url = use_bank), time=px_all(),area=c("955","956","957","959","960"),pob ="N",sex="T",p_prefix="main",.eliminate_rest = T,.val_code =FALSE) %>%clean_names() %>%select(time,code=region,value) %>%mutate(time=as.integer(time)) %>%left_join(codelist_area) %>%select(-tekst)P24Rfig3 %>%mutate(code =str_replace(code, "d\\. ", ""),code =factor(`code`, levels =c("Kommune Kujalleq", "Kommuneqarfik Sermersooq", "Qeqqata Kommunia", "Kommune Qeqertalik", "Avannaata kommunia") )) %>%statgl_plot(x=time,y=value,group = code,type="area",stacking="normal",title="Befolkningen i kommunernes relative fordeling",subtitle =paste0("1999 - ",horizonYear))```