Number of brides and grooms by their age from 1988 to 1998. Data has been downloaded from stat.si. Data on divorces comes from here.

knitr::opts_chunk$set(echo = TRUE)

library(tidyr)
library(ggplot2)
plotMarriage <- function(x, yaxis.name) {
  ggplot(x, aes(x = year, y = age_group)) +
    theme_bw() +
    theme(legend.position = "top", 
          axis.text.x = element_text(angle = 90, vjust = 0.5),
          legend.text = element_text(angle = 90, vjust = 0.5, hjust = 0.33)) +
    scale_fill_continuous(name = yaxis.name,
                          breaks = seq(from = 1000, to = 6000, by = 1000)) +
    xlab("Year") + ylab("Age group") +
    geom_tile(aes(fill = total)) +
    geom_text(aes(label = total), color = "white", size = 1.8)
}

plotDivorce <- function(div, gender) {
  ggplot(div, aes(x = age_group, y = divorce_after, fill = count)) +
  theme_bw() +
  xlab(sprintf("Age group of %s upon divorce", gender)) +
  ylab("Number of years of marriage") +
  geom_tile() +
  geom_text(aes(label = count), color = "white")
}
nevesta <- read.table("./data/nevesta_poroka.csv", header = TRUE, sep = "\t", 
                      check.names = FALSE)
colnames(nevesta) <- gsub(" Nevesta", "", colnames(nevesta))
colnames(nevesta)[1] <- "age_group"
nevesta$age_group <- gsub(" let", replacement = "", x = nevesta$age_group)
nevesta$age_group <- gsub("^Pod ", replacement = "", x = nevesta$age_group)
nevesta <- pivot_longer(nevesta, -age_group, names_to = "year", values_to = "total")
nevesta$age_group <- factor(nevesta$age_group,
                            levels = c("15", "15-19", "20-24", "25-29", "30-34",
                                       "35-39", "40-44", "45-49", "50-54", 
                                       "55-59", "60-64", ">= 65"))

zenin <- read.table("./data/zenin_poroka.csv", header = TRUE, sep = "\t",
                    check.names = FALSE)
colnames(zenin) <- gsub(" ženin", replacement = "", x = colnames(zenin))
colnames(zenin)[1] <- "age_group"
zenin$age_group <- gsub(" let", replacement = "", x = zenin$age_group)
zenin$age_group <- gsub("^Pod ", replacement = "", x = zenin$age_group)
zenin <- pivot_longer(zenin, -age_group, names_to = "year", values_to = "total")
zenin$age_group <- factor(zenin$age_group,
                          levels = c("15", "15-19", "20-24", "25-29", "30-34",
                                     "35-39", "40-44", "45-49", "50-54", 
                                     "55-59", "60-64", ">= 65"))

div.agegroups <- c("0-4", "5-9", "10-14", "15-19", "20-24", ">= 25")

div.m <- read.table("./data/razveze_moski_po_starosti_cas_trajanja.csv",
                  header = TRUE, sep = "\t", check.names = FALSE)
div.m$`0-4` <- rowSums(div.m[, c("< 1", "1", "2", "3", "4")])
div.m <- div.m[, c("year", "age_group", "0-4", "5-9",
               "10-14", "15-19", "20-24", ">= 25")]
div.m$age_group <- factor(div.m$age_group, 
                        levels = c("Pod 25 let", "25-29 let", "30-34 let", 
                                   "35-39 let", "40-44 let", "45-49 let", 
                                   "50-54 let", "55-59 let", "60 + let"),
                        labels = c("< 25", "25-29", "30-34", "35-39", "40-44", 
                                   "45-49", "50-54", "55-59", ">= 60"))
div.m <- pivot_longer(div.m, c(-year, -age_group), names_to = "divorce_after", 
             values_to = "count")
div.m$divorce_after <- factor(div.m$divorce_after, levels = div.agegroups)

div.f <- read.table("./data/razveze_zenske_po_starosti_cas_trajanja.csv",
                    header = TRUE, sep = "\t", check.names = FALSE)
div.f$`0-4` <- rowSums(div.f[, c("< 1", "1", "2", "3", "4")])
div.f <- div.f[, c("year", "age_group", "0-4", "5-9",
               "10-14", "15-19", "20-24", ">= 25")]
div.f$age_group <- factor(div.f$age_group, 
                        levels = c("Pod 25 let", "25-29 let", "30-34 let", 
                                   "35-39 let", "40-44 let", "45-49 let", 
                                   "50-54 let", "55-59 let", "60 + let"),
                        labels = c("< 25", "25-29", "30-34", "35-39", "40-44", 
                                   "45-49", "50-54", "55-59", ">= 60"))
div.f <- pivot_longer(div.f, c(-year, -age_group), names_to = "divorce_after", 
             values_to = "count")
div.f$divorce_after <- factor(div.f$divorce_after, levels = div.agegroups)
plotMarriage(nevesta, yaxis = "Number of brides")

plotMarriage(zenin, yaxis.name = "Number of grooms")

ggplot(div.m, aes(x = age_group, y = divorce_after, fill = count)) +
  theme_bw() +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
  xlab("Agre group of men upon divorce") +
  ylab("Number of years of marriage") +
  geom_tile() +
  geom_text(aes(label = count), color = "white", size = 1.5) +
  facet_wrap(~ year)

Above image summarized for all years.

div.m.sum <- aggregate(count ~ age_group + divorce_after, data = div.m, FUN = sum)
plotDivorce(div.m.sum, gender = "men")

div.f.sum <- aggregate(count ~ age_group + divorce_after, data = div.f, FUN = sum)
plotDivorce(div.f.sum, gender = "women")