Created
December 20, 2022 20:12
-
-
Save mschnetzer/d9556aabb7909b8c8b54d3c0d9e78540 to your computer and use it in GitHub Desktop.
Arbeitszeitrealitäten und -wünsche im Mikrozensus 2019 (https://twitter.com/matschnetzer/status/1605221105522073600)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
library(tidyverse) | |
library(haven) | |
library(msthemes) | |
library(gganimate) | |
mz <- read_dta("mz2019.dta") | |
mz |> filter(xerwstat == 1, dbers <6, dstd < 999, balt %in% 20:69, aquartal == 4) |> | |
select(asbper, gewjahr, bsex, balt, dstd, dwstd) |> | |
mutate(status = case_when( | |
dstd == dwstd ~ "keep", | |
dstd < dwstd ~ "incr", | |
dstd > dwstd ~ "decr", | |
TRUE ~ NA_character_ | |
)) |> | |
mutate(across(c(dstd,dwstd), as.numeric), | |
diffstd = abs(dstd - dwstd), | |
gender = fct_recode(factor(bsex), Männer = "1", Frauen = "2")) -> wunsch | |
plotdf <- wunsch |> filter(!status == "keep", dwstd > 0, dwstd <= 80, dstd <= 80) |> | |
mutate(id = row_number(), count = 1, color = dstd) |> | |
pivot_longer(c(dstd, dwstd), names_to = "state", values_to = "hours") |> | |
mutate(state = factor(state, levels = c("dstd", "dwstd"))) | |
labdf <- tibble(state=c("dstd", "dwstd"), | |
label=c("Tatsächliche Stunden", "Gewünschte Stunden")) | |
means <- plotdf |> group_by(status, state, gender) |> summarise(mittel = mean(hours)) |> | |
mutate(label = case_when(state == "dstd" & status == "decr" ~ "Reduktion", | |
state == "dstd" & status == "incr" ~ "Erhöhung", | |
TRUE ~ NA_character_)) | |
plot <- plotdf |> ggplot(aes(x = hours)) + | |
geom_jitter(aes(color = color, size = diffstd^2, y = 0.4), width = 0.4, alpha = 0.4) + | |
geom_density(aes(y = after_stat(density*8)), linewidth = 0.3, color = "black") + | |
geom_vline(aes(xintercept = mittel), data = means |> filter(status == "incr"), | |
linewidth = 1, color = "darkred") + | |
geom_vline(aes(xintercept = mittel), data = means |> filter(status == "decr"), | |
linewidth = 1, color = "darkblue") + | |
facet_wrap(~gender, nrow = 2) + | |
geom_label(aes(x = mittel, y = 0.9, label = label), | |
color = ifelse(means$status == "decr", "darkblue", "darkred"), | |
hjust = ifelse(means$status == "decr", 0, 1), | |
data = means, size=3) + | |
geom_label(aes(x = 80, y = 0.9, label = label, hjust = 1), | |
color=msc_palette[1], data = labdf, size=3) + | |
scale_color_gradientn(colors = MetBrewer::met.brewer(type = "continuous", name = "Hiroshige", | |
direction = -1), guide = "none") + | |
scale_size(guide = "none") + | |
scale_y_continuous(limits = c(NA, 1)) + | |
labs(x = "Wochenstunden", y = NULL, | |
title="Arbeitszeit und Arbeitszeitwünsche", | |
subtitle= str_wrap("Die Grafik zeigt die tatsächliche und gewünschte Wochenarbeitszeit nach Geschlechtern getrennt. Es werden nur Arbeitnehmer:innen mit Veränderungswünschen angezeigt und Wochenstunden zwischen 1 und 80 gefiltert. Die Größe der Punkte spiegelt das Ausmaß des Änderungswunsches wider. Die vertikalen Linien zeigen die Durchschnittsstunden nach Veränderungswunsch.", 130), | |
caption="Daten: Mikrozensus 2019, Statistik Austria. Grafik: @matschnetzer") + | |
theme_ms() + | |
theme(axis.text.y = element_blank(), | |
panel.grid.major.y = element_blank(), | |
plot.subtitle = element_text(size = 9, margin = margin(t = 10, b = 15, unit = "pt")), | |
plot.caption = element_text(margin = margin(t = 10, unit = "pt"))) + | |
transition_states(state, transition_length = 15, state_length = 20) | |
anim <- animate(plot, height = 6, width = 8, nframes = 100, res = 200, unit = "in") | |
anim_save("arbeitszeit.gif", anim) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment