![]() |
Klikk for å se (hakket) større. |
Hvorfor babler jeg om dette? Jo, fordi man stort sett må velge å vise enten relative eller absolutte verdier når man lager en graf om noe.
Med såkalte mosaikk-diagram kan man imidlertid vise begge deler!
Mosaikk-diagram, er ikke så ulike stablete søylediagram som summerer til 100 prosent. I slike søylediagram er vi vant til at høyden på søylene og søylebitene angir en verdi. I et mosaikk-diagram kan i tillegg bredden på søylene bety noe.
I tilfellet mitt kan det være litt forvirrende å snakke om bredde og høyde, for jeg har lagt diagrammet mitt på siden, så du skal slippe å snu på hodet for å lese fylkesnavnene. I mitt tilfelle viser bredden på søylebiten hvor stor andel den aldersgruppen utgjør av befolkningen i hvert fylke. I Oslo er søylebiten for voksne (20-64 år) bredere enn i Trøndelag fordi en større andel av befolkningen i Oslo (66,3 %) er voksne enn i Trøndelag (59 %).
I tillegg viser høyden på søylene hvor mange som bor i hvert fylke, uavhengig av aldersfordelingen. Høydeforskjellen mellom søylene til Viken og Vestland viser for eksempel at dobbelt så mange bor i Viken som i Vestland. Dette gjør at arealet på senior-rektangelen angir hvor mange eldre som bor i hvert fylke.
Vi kan for eksempel se nå at hvis du møter på 100 tilfeldige mennesker på i Innlandet, så er det mer sannsynlig at du møter på en over 65 år enn hvis du møter på 100 tilfeldige mennesker i Oslo. Rett og slett fordi en større andel av befolkningen i Nordland er 65 år og eldre enn i Oslo.
Men, vi kan også se at det bor flere eldre mennesker i Viken enn i Nordland, selv om prosentandelen er lavere, rett og slett fordi det bor mye mer folk i Viken i utgangspunktet. Generelt, legg merke til hvor mye høyere Viken er enn alle andre fylker ...
Et par siste ting om valg i denne grafen. Jeg valgte at andelen eldre skulle stå i sentrum. Derfor rangerte jeg alle fylkene etter andelen eldre. I tillegg ga jeg denne aldersgruppen en mye sterkere farge enn de andre aldersgruppene. Gulaktige farger er ekstremt effektive til å fremheve noe fordi de kan være både lyse og sterke (mette/saturated) samtidig. Samtidig knotet jeg en del med fargehjulet til Adobe for å finne dempede farger som samtidig fungerer bra med denne gulfargen. Jeg valgte også å ikke angi verdier for hvor mange som faktisk bor i de forskjellige regionene, rett og slett fordi jeg ikke vil oversvømme grafen med altfor mange detaljer.
Når det gjelder arbeidsgangen, så lagde jeg først grafen i statistikkprogrammet R, hvor jeg også lastet ned statistikken fra SSB. Koden kan du se under. Deretter eksporterte jeg en svg-fil til Inkscape – som er et veldig habilt gratisalternativ til Adobe Illustrator – og gjorde en god del estetisk finpuss der. Svg-fil er viktig, for det betyr at alle enkeltelementene i grafen er redigerbare vektorer og kan flyttes og endres på i Inkscape. Jeg kunne nok tatt meg av mye mer av den estetiske finpussen i R, men var litt gøy å bare knote i Inkscape. Lenge siden jeg har gjort den type grafisk arbeid.
# install.packages(c("ggmosaic", "tidyverse", "ggmosaic")) | |
# Activate packages | |
library(tidyverse) | |
library(PxWebApiData) | |
library(ggmosaic) | |
# Import SSB data | |
meta <- ApiData("http://data.ssb.no/api/v0/en/table/07459", returnMetaFrames = TRUE) | |
meta$Region | |
meta$Kjonn | |
meta$Alder | |
df_raw <- ApiData("http://data.ssb.no/api/v0/en/table/07459", | |
Region = list("agg_single:Fylker2020", c("30", "03", "34", "38", "42", "11", "46", "15", "50", "18", "54", "21")), | |
Alder = list("agg:TredeltGrupperingB2", c("F0-19", "F20-64", "F65+")), | |
Tid = "2021") | |
df1 <- df_raw$`07459: Population, by region, sex, age, contents and year` | |
# Manipulate data | |
# A lot of tweaking to make sure I can rank the counties according | |
# to share of seniors. | |
df <- df1 %>% | |
group_by(region, age) %>% | |
summarise(pop = sum(value)) %>% | |
filter(region != "Svalbard") %>% | |
mutate(old = case_when(age == "65 years or older" ~ pop), | |
adult = case_when(age == "20-64 years" ~ pop), | |
young = case_when(age == "0-19 years" ~ pop)) %>% | |
fill(old, .direction = "updown") %>% | |
fill(adult, .direction = "updown") %>% | |
fill(young, .direction = "updown") | |
# Get total population of each region | |
df_tot <- df %>% | |
group_by(region) %>% | |
summarise(poptot = sum(pop), | |
old = first(old), | |
adult = first(adult), | |
young = first(young)) %>% | |
mutate(old_share = old / poptot * 100, | |
adult_share = adult / poptot * 100, | |
young_share = young / poptot * 100) | |
# Estimate senior share of each region | |
# Change order of regions | |
df <- df %>% | |
left_join(df_tot) #%>% | |
# Make mosaic graph | |
# Ensure falling order of counties according to share of old people | |
df$region <- fct_reorder(df$region, df$old_share) | |
# Make mosaic pplots | |
# Plot without labels | |
mosaic <- df %>% | |
ggplot() + | |
geom_mosaic(aes(x = product(age, region), fill = age, weight = pop)) + | |
coord_flip() + | |
theme_void() + | |
theme(legend.position = "none") + | |
scale_fill_manual(values=c("#BC9F9F", "#7BA7B0", "#F0C400")) | |
# Plot with labels | |
m_labels <- df %>% | |
ggplot() + | |
geom_mosaic(aes(x = product(age, region), fill = age, weight = pop)) + | |
coord_flip() + | |
theme(legend.position = "none") + | |
scale_fill_manual(values=c("#BC9F9F", "#7BA7B0", "#F0C400")) | |
# Show the graphs | |
mosaic | |
m_labels |
Ingen kommentarer:
Legg inn en kommentar