Central government personal income tax rates and thresholds - TABLE_I1

Data - OECD


Info

Last observation: A: 2022 (N = 405)

First observation: A: 2000 (N = 378)

Last data update: 02 aoû 2026, 09:15. Last compile: 18 aoû 2026, 03:27

Structure

Germany

Code
TABLE_I1 |>
  filter(COU == "DEU") |>
  year_to_date() |>
  left_join(TABLE_I1_var$CENTGOV_RATES, by = "CENTGOV_RATES") |>
  filter(grepl("Marginal rate", Centgov_rates)) |>
  ggplot() + theme_minimal() + ylab("Tax Rate (%)") + xlab("") +
  geom_line(aes(x = date, y = obsValue/100, color = Centgov_rates)) +
  scale_color_manual(values = viridis(4)[1:3]) +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.65, 0.6),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 50, 5),
                     labels = percent_format(accuracy = 1))

France

Code
TABLE_I1 |>
  filter(COU == "FRA") |>
  year_to_date() |>
  left_join(TABLE_I1_var$CENTGOV_RATES, by = "CENTGOV_RATES") |>
  filter(grepl("Marginal rate", Centgov_rates)) |>
  ggplot() + theme_minimal() + ylab("Tax Rate (%)") + xlab("") +
  geom_line(aes(x = date, y = obsValue/100, color = Centgov_rates)) +
  scale_color_manual(values = viridis(8)[1:7]) +
  scale_x_date(breaks = seq(1920, 2100, 2) |> paste0("-01-01") |> as.Date(),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.65, 0.6),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 0.01*seq(0, 50, 5),
                     labels = percent_format(accuracy = 1))