#######################################################
## Open Data Kooperation: univie & Parlament ##########
## Showcase 12: Mitglieder des Bundesrats #############
## code by Laurenz Ennser-Jedenastik & Daniel Bliem ###
### Kontakt: laurenz.ennser@univie.ac.at ##############
#######################################################
# Leeren der Arbeitsumgebung
rm(list = ls())
# Installieren und Laden der erforderlichen Pakete.
necessary.packages <- c(
"httr",
"jsonlite",
"RJSONIO",
"RCurl",
"httr2",
"purrr",
"tibble",
"rjson",
"tidyverse",
"gridExtra",
"stringr",
"showtext")
new.packages <- necessary.packages[!(necessary.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)
lapply(necessary.packages, library, character.only = TRUE)
### Herunterladen des Datensatzes: Parlamentarier:innen ab 1918
# Definieren des Verzeichnisses zum Abspeichern der JSON Files
setwd("Pfad/zu/Ihrem/Speicherort")
# Definition von API-URI und Body des API-Calls
req <- request("https://www.parlament.gv.at/Filter/api/filter/data/409?1=1&showAll=true&export=true")
t1 <-
req %>%
req_body_raw('{
"ATTR_JSON.mandate_detail.gremium_name": [
"Nationalrat",
"Bundesrat"
]
}}') %>%
req_perform()
# Die Antwort in einen Dataframe laden
df1 <- t1 %>% resp_body_json()
# Loop zur Umwandlung von relativen Links aus den Ergebnislisten des API-Calls (Filter) zu absoluten Links
nrows <- length(df1$rows)
vorne <- "https://www.parlament.gv.at"
hinten <- "?json=true"
all.urls <- rep(NA, nrows)
all.ids <- rep(NA, nrows)
# Iterieren durch die Reihen, um aus den Links herunterladbare URLs zu machen
for (i in 1:nrows) {
all.urls[i] <- paste0(vorne, df1[["rows"]][[i]][[10]], hinten)
all.ids[i] <- gsub("/person/", "", df1[["rows"]][[i]][[10]])
download.file(all.urls[i], destfile = paste0(all.ids[i], ".json"))
}
# Erstellen der leeren Variablen für den Dataframe
files.in.dir <- list.files(path = "Pfad/zu/Ihrem/Speicherort", pattern = "*.json", full.names = TRUE)
count.files <- length(files.in.dir)
df01 <- data.frame()
# Iterieren durch alle Dateien im Verzeichnis und extrahieren relevanter Informationen in den Dataframe
for (i in 1:count.files) {
getfile <- fromJSON(file = files.in.dir[i])
print(files.in.dir[i])
name <- getfile[["meta"]][["description"]]
id <- getfile[["content"]][["personInfo"]][["pad_intern"]]
mandate <- getfile[["content"]][["biografie"]][["mandatefunktionen"]][["mandate"]]
if (!is.null(mandate)) {
for (j in seq_along(mandate)) {
mandat_kammer <- mandate[[j]][["funktion_text"]]
mandat_von <- mandate[[j]][["funktion_von"]]
mandat_bis <- mandate[[j]][["funktion_bis"]]
mandat_wahlp <- ifelse(!is.null(mandate[[j]][["wahlpartei_text"]]), mandate[[j]][["wahlpartei_text"]], NA)
# Daten zum Dataframe hinzufügen
new_row <- data.frame(
name = name,
id = id,
mandat_kammer = mandat_kammer,
mandat_von = mandat_von,
mandat_bis = mandat_bis,
mandat_wahlp = mandat_wahlp,
stringsAsFactors = FALSE
)
df01 <- rbind(df01, new_row)
}
}
}
# Datumsvariablen umwandeln
df01$mandat_von <- as.Date(df01$mandat_von, format = "%d.%m.%Y")
df01$mandat_bis <- as.Date(df01$mandat_bis, format = "%d.%m.%Y")
df01$mandat_bis[is.na(df01$mandat_bis)] <- as.Date("2025-01-01")
# Untersuchungszeitraum filtern: Bis Ende 2024
df01 <- df01 %>% filter(mandat_von <= "2024-12-31")
# Eintagesmandate herausfiltern
df01 <- df01 %>% filter(mandat_von != mandat_bis)
# Mandate zusammenfassen, die nur einen Tag auseinander liegen (Beziehen sich auf dasselbe Mandat)
df01 <- df01 %>%
arrange(id, mandat_kammer, mandat_wahlp, mandat_von) %>%
group_by(id, mandat_kammer, mandat_wahlp) %>%
mutate(
group = cumsum(coalesce(as.numeric(mandat_von - lag(mandat_bis)) > 1, TRUE))
) %>%
group_by(id, mandat_kammer, mandat_wahlp, group) %>%
summarise(
name = first(name),
mandat_von = mandat_von[which.min(mandat_von)],
mandat_bis = mandat_bis[which.max(mandat_bis)],
.groups = 'drop'
)
# Zusammenfassen der Wahlparteien
df01 <- df01 %>%
mutate(mandat_wahlp = case_when(
mandat_wahlp %in% c("Sozialdemokratische Arbeiterpartei Deutschösterreichs", "Sozialdemokratische Partei Österreichs", "Sozialistische Partei Österreichs") ~ "SPÖ",
mandat_wahlp %in% c("Christlichsoziale Partei", "Österreichische Volkspartei") ~ "ÖVP",
mandat_wahlp %in% c("Freiheitliche Partei Österreichs", "Die Freiheitlichen in Kärnten - Liste Gerhard Dörfler") ~ "FPÖ",
mandat_wahlp == "Die Grünen" ~ "Grüne",
mandat_wahlp %in% c("Bündnis Zukunft Österreich", "Die Freiheitlichen in Kärnten - BZÖ") ~ "BZÖ",
mandat_wahlp %in% c("Kommunisten und Linkssozialisten", "Kommunistische Partei Österreichs", "Linksblock", "Volksopposition") ~ "KPÖ",
TRUE ~ mandat_wahlp
))
### Kurzmandate herausfiltern, die sich mit einem anderen Amt überschneiden oder direkt darauf folgen (Minister:innen, Präsident:innen des Nationalrats, etc.)
# Personen filtern: Nur Personen, die ein NR-Mandat unter 6 Monate lang inne hatten
df_kurzmandate <- df01 %>%
group_by(id) %>%
filter(
any(str_starts(mandat_kammer, "Abgeordnete") & difftime(mandat_bis, mandat_von, units = "days") <= 180) &
any(!str_starts(mandat_kammer, "Abgeordnete"))
) %>%
ungroup()
df_kurzmandate <- df_kurzmandate %>%
filter(!(str_starts(mandat_kammer, "Abgeordnete") & difftime(mandat_bis, mandat_von, units = "days") > 180))
# Rollen filtern: Nur Rollen, die mit einem einfachen NR-Mandat nicht vereinbar sind (Minister:innen, Präsident:innen des Nationalrats, etc.)
df_kurzmandate <- df_kurzmandate %>%
group_by(id) %>%
filter(any(str_detect(mandat_kammer, "Bundesminister|Staatssekret|Bundeskanzler|Vizekanzler|Präsident"))) %>%
ungroup()
df_kurzmandate <- df_kurzmandate %>%
filter(str_detect(mandat_kammer, "Bundesminister|Staatssekret|Bundeskanzler|Vizekanzler|Präsident|Abgeordnete"))
# Alle NR-Mandate herausfiltern, die sich nicht mit einem anderem Amt überschneiden
df_kurzmandate <- df_kurzmandate %>%
group_by(id) %>%
filter(any(
str_starts(mandat_kammer, "Abgeordnete") &
sapply(mandat_von, function(start) {
any(
!str_starts(mandat_kammer, "Abgeordnete") &
(mandat_von <= start + 1 & mandat_bis >= start - 1)
)
})
)) %>%
filter(
!str_starts(mandat_kammer, "Abgeordnete") |
sapply(mandat_von, function(start) {
any(
!str_starts(mandat_kammer, "Abgeordnete") &
(mandat_von <= start + 1 & mandat_bis >= start - 1)
)
})
) %>%
ungroup()
# Die übrig gebliebenen Observationen aus dem ursprünglichen Dataframe entfernen (Alle Überschneidungen)
df01 <- df01 %>%
anti_join(df_kurzmandate, by = c("id", "mandat_kammer", "mandat_von", "mandat_bis"))
# Untersuchungsobjekte filtern: Nur einfache Abgeordnete aus Nationalrat und Bundesrat
df01 <- df01 %>%
filter(str_starts(mandat_kammer, "Abgeordnete") | str_starts(mandat_kammer, "Mitglied") & !mandat_kammer %in% c("Mitglied des Europäischen Parlaments", "Mitglied der Konst. Nationalversammlung", "Mitglied der Prov. Nationalversammlung"))
# Kammernbezeichnungen vereinheitlichen
df01 <- df01 %>%
mutate(mandat_kammer = recode(
mandat_kammer,
"Abgeordnete zum Nationalrat" = "NR",
"Abgeordneter zum Nationalrat" = "NR",
"Mitglied des Bundesrates" = "BR"
))
# Speichern des Datensatzes
save(df01, file = "Ihr_Dateiname.RData")
# Benutzerdefinierte Schriftart ("Lato") hinzufügen und aktivieren
font_add("Lato",
regular = "Pfad/zu/Ihrer/Schriftart.ttf",
bold = "Pfad/zu/Ihrer/Schriftart.ttf")
showtext_auto()
# Erstellen eines eigenen Themes für die Grafiken
custom_theme <- function() {
theme_minimal() +
theme(
plot.background = element_rect(fill = "white", color = NA),
panel.grid.major = element_line(color = alpha("gray", 0.25)),
panel.grid.minor = element_line(color = "white"),
panel.border = element_blank(),
plot.title = element_text(color = "#132843", size = 55, face = "bold", family = "Lato", hjust = 0),
plot.subtitle = element_text(color = "#132843", size = 38, family = "Lato", margin = margin(b = 20), hjust = 0),
axis.title.x = element_text(face = "bold", family = "Lato", size = 35, margin = margin(t = 15)),
axis.title.y = element_text(face = "bold", family = "Lato", size = 35, margin = margin(r = 15)),
axis.text = element_text(family = "Lato", size = 30),
legend.text = element_text(family = "Lato", face = "bold", size = 35),
plot.margin = margin(1.2, 0.7, 0.7, 0.7, "cm"),
plot.title.position = "plot",
plot.caption.position = "plot",
plot.caption = element_text(size = 27)
)
}
# Speicherort für die Grafiken festlegen
setwd("Pfad/zu/Ihrem/Speicherort")
### 1. Grafik: Bundesratsmitglieder mit NR-Erfahrung
# Stichtage festlegen
stichtage <- c(seq(as.Date("1950-01-01"), as.Date("2020-01-01"), by = "10 years"))
# Dataframe für Ergebnisse initialisieren
df_plot1 <- data.frame(Stichtag = stichtage, NR_Erfahrung_Prozent = numeric(length(stichtage)))
# Iterieren über BR-Mitglieder zu jedem Stichtag, um Prozentsatz mit NR-Erfahrung zu ermitteln
for (i in seq_along(stichtage)) {
stichtag <- stichtage[i]
# BR-Mitglieder am Stichtag
br_mitglieder <- df01 %>%
filter(mandat_kammer == "BR" &
as.Date(mandat_von) <= stichtag &
as.Date(mandat_bis) >= stichtag)
# NR-Erfahrung prüfen
nr_erfahrung <- sapply(br_mitglieder$id, function(br_id) {
nr_mandate <- df01 %>%
filter(id == br_id & mandat_kammer == "NR" &
as.Date(mandat_bis) < as.Date(br_mitglieder$mandat_von[br_mitglieder$id == br_id]))
return(nrow(nr_mandate) > 0)
})
df_plot1$NR_Erfahrung_Prozent[i] <- mean(nr_erfahrung) * 100
}
# X-Achsenbeschriftung auf ganze Jahre ändern
df_plot1$Stichtag_label <- format(df_plot1$Stichtag, "%Y")
# Grafik erstellen
grafik1 <- ggplot(df_plot1, aes(x = factor(Stichtag_label, levels = unique(Stichtag_label)), y = NR_Erfahrung_Prozent)) +
geom_bar(stat = "identity", fill = "#132843", width = 0.6) +
geom_text(aes(label = sprintf("%.1f%%", NR_Erfahrung_Prozent)), vjust = -0.5, size = 12) +
scale_y_continuous(labels = scales::percent_format(scale = 1), limits = c(0, 25)) +
labs(title = "Mitglieder des Bundesrats mit Nationalratserfahrung", subtitle = "1950 – 2020; Stichtage jeweils am 01. Jän. des Jahres",
x = "", y = "Anteil an allen Bundesratsmitgliedern (%)", caption = "Quelle: parlament.gv.at") +
custom_theme()
ggsave("SC12_Grafik01.jpg", grafik1, width = 10, height = 7.5, units = "in", dpi = 300)
### 2. Grafik: Bundesratsmitglieder, die später ein NR-Mandat innehaben
# Leeren Dataframe für Ergebnisse initialisieren
df_plot2 <- data.frame(Stichtag = stichtage, NR_Erfahrung_Prozent = numeric(length(stichtage)))
# Iterieren über BR-Mitglieder zu jedem Stichtag, um Prozentsatz mit künftigem NR-Mandat zu ermitteln
for (i in seq_along(stichtage)) {
stichtag <- stichtage[i]
# BR-Mitglieder am Stichtag
br_mitglieder <- df01 %>%
filter(mandat_kammer == "BR" &
as.Date(mandat_von) <= stichtag &
as.Date(mandat_bis) >= stichtag)
# Zukünftige NR-Mandate prüfen
nr_erfahrung <- sapply(br_mitglieder$id, function(br_id) {
nr_mandate <- df01 %>%
filter(id == br_id & mandat_kammer == "NR" &
as.Date(mandat_von) > as.Date(br_mitglieder$mandat_bis[br_mitglieder$id == br_id]))
return(nrow(nr_mandate) > 0)
})
df_plot2$NR_Erfahrung_Prozent[i] <- mean(nr_erfahrung) * 100
}
# X-Achsenbeschriftung auf ganze Jahre ändern
df_plot2$Stichtag_label <- format(df_plot2$Stichtag, "%Y")
# Grafik erstellen
grafik2 <- ggplot(df_plot2, aes(x = factor(Stichtag_label, levels = unique(Stichtag_label)), y = NR_Erfahrung_Prozent)) +
geom_bar(stat = "identity", fill = "#132843", width = 0.6) +
geom_text(aes(label = sprintf("%.1f%%", NR_Erfahrung_Prozent)), vjust = -0.5, size = 12) +
scale_y_continuous(labels = scales::percent_format(scale = 1), limits = c(0, 25)) +
labs(title = "Mitglieder des Bundesrats, die später ein Nationalratsmandat innehaben", subtitle = "1950 – 2020; Stichtage jeweils am 01. Jän. des Jahres",
x = "", y = "Anteil an allen Bundesratsmitgliedern (%)", caption = "Quelle: parlament.gv.at") +
custom_theme()
ggsave("SC12_Grafik02.jpg", grafik2, width = 10, height = 7.5, units = "in", dpi = 300)
### 3. Grafik: Bundesratsmitglieder mit NR-Erfahrung pro Wahlpartei
# Filtern auf BR-Mandate ab 1945
df_br1945 <- df01 %>%
filter(mandat_kammer == "BR" & as.Date(mandat_von) >= as.Date("1945-01-01"))
# Initialisieren eines leeren Dataframes für die Ergebnisse
df_plot3 <- data.frame(Wahlpartei = character(), NR_Erfahrung_Prozent = numeric(), Mandate = numeric())
# Iterieren über die Wahlparteien zu jedem Stichtag, um Prozentsatz mit NR-Erfahrung zu ermitteln
Wahlparteien <- unique(df_br1945$mandat_wahlp)
for (Wahlpartei in Wahlparteien) {
br_mitglieder <- df_br1945 %>%
filter(mandat_wahlp == Wahlpartei) %>%
distinct(id, .keep_all = TRUE) # Sicherstellen, dass jede id nur einmal gezählt wird
nr_erfahrung <- sapply(br_mitglieder$id, function(br_id) {
nr_mandate <- df01 %>%
filter(id == br_id & mandat_kammer == "NR" &
as.Date(mandat_bis) < as.Date(min(br_mitglieder$mandat_von[br_mitglieder$id == br_id])))
return(nrow(nr_mandate) > 0)
})
nr_erfahrung_prozent <- mean(nr_erfahrung) * 100
anzahl_mandate <- nrow(br_mitglieder)
# Hinzufügen der Ergebnisse zum Dataframe
df_plot3 <- rbind(df_plot3, data.frame(Wahlpartei = Wahlpartei,
NR_Erfahrung_Prozent = nr_erfahrung_prozent,
Mandate = anzahl_mandate))
}
# Wahlparteien, die nie Fraktionsstärke im Bundesrat hatten, exkludieren
df_plot3 <- df_plot3 %>% filter(Mandate >= 10)
# Reihenfolge und Farbe der Parteien festlegen
party_order <- c("ÖVP", "SPÖ", "FPÖ", "Grüne")
party_colors <- c("ÖVP" = "#62c3d0", "SPÖ" = "#FF0000", "FPÖ" = "#0052fb", "Grüne" = "#69b12e")
df_plot3$Wahlpartei <- factor(df_plot3$Wahlpartei, levels = party_order)
# Grafik erstellen
grafik3 <- ggplot(df_plot3, aes(x = Wahlpartei, y = NR_Erfahrung_Prozent, fill = Wahlpartei)) +
geom_bar(stat = "identity", position = "dodge", width = 0.4) +
geom_segment(data = df_plot3 %>% filter(NR_Erfahrung_Prozent == 0), aes(x = as.numeric(Wahlpartei) - 0.2, xend = as.numeric(Wahlpartei) + 0.2, y = 0, yend = 0), color = "#69b12e", size = 0.5) +
geom_text(aes(label = sprintf("%.1f%%", NR_Erfahrung_Prozent)), hjust = 0.4, vjust = -1, size = 12) +
scale_y_continuous(labels = scales::percent_format(scale = 1), limits = c(0, 30)) +
scale_fill_manual(values = party_colors) +
labs(title = "Mitglieder des Bundesrats mit Nationalratserfahrung",
subtitle = "Nach Wahlpartei; Dez. 1945 – Dez. 2024",
x = "", y = "Anteil an allen Bundesratsmitgliedern der Wahlpartei (%)", caption = "Quelle: parlament.gv.at") +
custom_theme() +
theme(legend.title = element_blank(),
legend.position = "bottom",
axis.text.x = element_text(lineheight = 0.3))
ggsave("SC12_Grafik03.jpg", grafik3, width = 10, height = 7.5, units = "in", dpi = 300)
### 4. Grafik: Bundesratsmitglieder die später ein NR-Mandat innehaben pro Wahlpartei
# Filtern auf BR-Mandate ab 1945, ohne aktuelle Mandate
df_br2025 <- df01 %>%
filter(mandat_kammer == "BR" &
as.Date(mandat_von) >= as.Date("1945-01-01") & as.Date(mandat_bis) < as.Date("2025-01-01"))
# Initialisieren eines leeren Dataframes für die Ergebnisse
df_plot4 <- data.frame(Wahlpartei = character(), NR_Erfahrung_Prozent = numeric(), Mandate = numeric())
# Iterieren über die Wahlparteien, um die Prozentwerte an künftigen NR-Mandaten für BR-Mandatar:innen jeder Partei zu erhalten
for (Wahlpartei in Wahlparteien) {
br_mitglieder <- df_br2025 %>%
filter(mandat_wahlp == Wahlpartei) %>%
distinct(id, .keep_all = TRUE) # Sicherstellen, dass jede id nur einmal gezählt wird
nr_erfahrung <- sapply(br_mitglieder$id, function(br_id) {
nr_mandate <- df01 %>%
filter(id == br_id & mandat_kammer == "NR" &
as.Date(mandat_von) > as.Date(max(br_mitglieder$mandat_bis[br_mitglieder$id == br_id])))
return(nrow(nr_mandate) > 0)
})
nr_erfahrung_prozent <- mean(nr_erfahrung) * 100
anzahl_mandate <- nrow(br_mitglieder)
# Hinzufügen der Ergebnisse zum Dataframe
df_plot4 <- rbind(df_plot4, data.frame(Wahlpartei = Wahlpartei,
NR_Erfahrung_Prozent = nr_erfahrung_prozent,
Mandate = anzahl_mandate))
}
# Wahlparteien, die nie Fraktionsstärke im Bundesrat hatten, exkludieren und Reihenfolge festlegen
df_plot4 <- df_plot4 %>% filter(Mandate >= 10)
df_plot4$Wahlpartei <- factor(df_plot4$Wahlpartei, levels = party_order)
# Grafik erstellen
grafik4 <- ggplot(df_plot4, aes(x = Wahlpartei, y = NR_Erfahrung_Prozent, fill = Wahlpartei)) +
geom_bar(stat = "identity", position = "dodge", width = 0.4) +
geom_text(aes(label = sprintf("%.1f%%", NR_Erfahrung_Prozent)), hjust = 0.4, vjust = -1, size = 12) +
scale_y_continuous(labels = scales::percent_format(scale = 1), limits = c(0, 30), breaks = seq(0, 30, by = 5)) +
scale_fill_manual(values = party_colors) +
labs(title = "Mitglieder des Bundesrats, die später ein Nationalratsmandat innehaben",
subtitle = "Nach Wahlpartei; Dez. 1945 – Dez. 2024",
x = "", y = "Anteil an allen Bundesratsmitgliedern der Wahlpartei (%)", caption = "Quelle: parlament.gv.at") +
custom_theme() +
theme(legend.title = element_blank(),
legend.position = "bottom",
axis.text.x = element_text(lineheight = 0.3))
ggsave("SC12_Grafik04.jpg", grafik4, width = 10, height = 7.5, units = "in", dpi = 300)
### 5. Grafik: Verweildauer von Mandatar:innen in NR/BR pro Jahrzehnt
## Klubwechsel innerhalb eines Mandatszeitraums zusammenfassen
# Sortieren der Daten
df01_sorted <- df01 %>%
select(id, mandat_kammer, mandat_von, mandat_bis, mandat_wahlp, name) %>%
arrange(id, mandat_kammer, mandat_von)
# Gruppenindex für zusammenhängende Mandate mit Klubwechsel erstellen
df01_sorted <- df01_sorted %>%
group_by(id, mandat_kammer) %>%
mutate(
lag_bis = lag(mandat_bis),
start_new_group = is.na(lag_bis) | (mandat_von > lag_bis + 1),
grp = cumsum(start_new_group)
) %>%
ungroup()
# Mandate zusammenfassen
df_result <- df01_sorted %>%
group_by(id, mandat_kammer, grp) %>%
summarise(
mandat_wahlp = paste(mandat_wahlp, collapse = ", "),
mandat_von = min(mandat_von),
mandat_bis = max(mandat_bis),
.groups = "drop"
)
# Verweildauer und Eintrittsjahrzehnt berechnen
df_dauer <- df_result %>%
filter(as.Date(mandat_bis) < as.Date("2025-01-01")) %>% # Aktuelle Mandate ausschließen
mutate(
Verweildauer = as.numeric(as.Date(mandat_bis) - as.Date(mandat_von)) / 365.25,
Eintrittsjahrzehnt = paste0(floor(as.numeric(format(as.Date(mandat_von), "%Y")) / 10) * 10, "er")) %>%
filter(Eintrittsjahrzehnt %in% c("1950er", "1960er", "1970er", "1980er", "1990er", "2000er", "2010er"))
# Median-Verweildauer nach Kammer und Jahrzehnt berechnen
df_plot5 <- df_dauer %>%
group_by(Kammer = mandat_kammer, Eintrittsjahrzehnt) %>%
summarise(
Median_Verweildauer = median(Verweildauer, na.rm = TRUE)
) %>%
ungroup()
# Namen für die Legende der Grafik anpassen
df_plot5 <- df_plot5 %>%
mutate(Kammer = recode(Kammer, "BR" = "Bundesrat", "NR" = "Nationalrat"))
# Grafik erstellen
grafik5 <- ggplot(df_plot5, aes(x = Eintrittsjahrzehnt, y = Median_Verweildauer, fill = Kammer)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.8), width = 0.7) +
scale_y_continuous(labels = scales::number_format(accuracy = 0.1)) +
scale_fill_manual(values = c("Bundesrat" = "#b8a552", "Nationalrat" = "#132843")) +
labs(
title = "Verweildauer von Mandatar:innen im Bundesrat und Nationalrat",
subtitle = "Jän. 1950 – Dez. 2024; Median; Nach Eintrittsjahrzehnt (nur abgeschlossene Mandate)",
x = "", y = "Median Verweildauer (Jahre)", caption = "Quelle: parlament.gv.at"
) +
custom_theme() +
theme(legend.position = "bottom",
legend.title = element_blank())
ggsave("SC12_Grafik05.jpg", grafik5, width = 10, height = 7.5, units = "in", dpi = 300)