Gdzie mężczyźni żyją krócej

Oczekiwana długość życia w Europie systematycznie rośnie od wielu lat, jednak kobiety wciąż żyją dłużej niż mężczyźni w każdym europejskim kraju. W tym wpisie wykorzystujemy dane Eurostatu z zestawu demo_mlexpec, by zilustrować tę różnicę w roku 2023 — odtwarzamy wykres z tego wpisu na X opublikowanego przez Stowarzyszenie na rzecz Chłopców i Mężczyzn.

W tym zadaniu korzystamy z pakietów eurostat, dplyr, tidyr i ggplot2:

  • pobieramy zestaw danych z Eurostatu,

  • filtrujemy dane (interesuje na oczekiwana długości życia przy urodzeniu: wiek < 1 rok),

  • liczymy różnicę między kobietami a mężczyznami (tzw. lukę),

  • a następnie przygotowujemy czytelną wizualizację.

Najpierw pobieramy dane z Eurostatu:

Kliknij, by zobaczyć kod
library(eurostat)
library(dplyr)
library(tidyr)
library(ggplot2)

life_df <- get_eurostat(id = "demo_mlexpec", time_format = "num")
life_df <- label_eurostat(life_df)

Następnie filtrujemy dane dla roku 2023, pozostawiamy jedynie informacje o długości życia kobiet i mężczyzn przy urodzeniu, obliczamy przewagę kobiet (różnicę w latach), sortujemy kraje według tej różnicy i usuwamy dane zagregowane — pozostawiając UE-27 jako punkt odniesienia.

Kliknij, by zobaczyć kod
df_gap <- life_df %>%
  filter(TIME_PERIOD == 2023,
         age == "Less than 1 year",
         sex %in% c("Males", "Females")
         ) %>%
  select(geo, sex, values) %>%
  pivot_wider(names_from = sex, values_from = values) %>%
  mutate(
    gap = Females - Males) %>%
  arrange(desc(gap))
df_gap$geo[df_gap$geo == "European Union - 27 countries (from 2020)"] <- "EU27"
df_gap <- df_gap[nchar(df_gap$geo) < 14,]

Na poniższym wykresie szare słupki przedstawiają oczekiwaną długość życia mężczyzn, zaś niebieskie słupki po lewej pokazują lukę – czyli o ile lat kobiety żyją dłużej.

Tym samym całkowita długość słupka (szary + niebieski) odpowiada oczekiwanej długości życia kobiet.

Kliknij, by zobaczyć kod
gap_plot <- ggplot(df_gap, aes(y = reorder(geo, gap))) +
  geom_col(aes(x = Males), fill = "grey80", width = 0.7) +
  geom_col(aes(x = -gap), fill = "#0033A0", width = 0.7) +
  geom_text(
    aes(x = -gap / 2, label = sprintf("%.1f", gap)), color = "white", size = 2, fontface = "bold") +
  geom_text(aes(x = 3, label = sprintf("%.1f", Males)), hjust = 0, size = 2) +
  expand_limits(y = nrow(df_gap) + 2) +
  coord_cartesian(xlim = c(-max(df_gap$gap) - 2, max(df_gap$Males) + 5)) +
  annotate(
    "text",
    x = -max(df_gap$gap) / 2,
    y = nrow(df_gap) + 1,
    label = "Female advantage",
    fontface = "bold",
    color = "#0033A0",
    size = 2.5
  ) +
  annotate(
    "text",
    x = max(df_gap$Males) / 2,
    y = nrow(df_gap) + 1,
    label = "Male life expectancy",
    fontface = "bold",
    color = "darkgrey",
    size = 2.5
  ) +
  labs(
    title = "Male Life Expectancy and Female Advantage (Europe, 2023)",
    x = "Life expectancy (years)",
    y = NULL,
    caption = "Source: Eurostat (demo_mlexpec)"
  ) +
  scale_x_continuous(labels = function(x) abs(x)) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold"),
    panel.grid.major.y = element_blank(),
    panel.grid.minor = element_blank(),
    axis.title.y = element_blank(),
    axis.text.y = element_text(size = 7) 
  )
gap_plot
Błażej Kochański
Błażej Kochański
ekspert ds. ryzyka bankowego, naukowiec, menedżer i konsultant