Passenger cars, by age - road_eqs_carage

Data - Eurostat

Info

Last observation: Annual: 2024 (N = 213)

First observation: Annual: 2013 (N = 182)

Last data update: 23 jul 2026, 22:19. Last compile: 24 jul 2026, 03:47

Structure

New registrations of passenger cars in Germany, France, Italy

Code
road_eqs_carage %>%
  
  filter(geo %in% c("FR", "DE", "IT"),
         age == "TOTAL") %>%
  year_to_date() %>%
  arrange(date) %>%
  ggplot(.) + geom_line(aes(x = date, y = values/1000000, color = Geo, linetype = Geo)) + 
  theme_minimal() + xlab("") + ylab("Passenger cars") +
  scale_x_date(breaks = seq(1960, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(0, 100, 5),
                     labels = dollar_format(accuracy = 1, prefix = "", suffix = "M")) +
  scale_color_manual(values = viridis(5)[1:4]) +
  theme(legend.position = c(0.2, 0.80),
        legend.title = element_blank())

Age Structure of the Car Fleet, France

Code
road_eqs_carage %>%
  filter(geo == "FR",
         age %in% c("Y_LT2", "Y2-5", "Y5-10", "Y10-20", "Y_GT20")) %>%
  left_join(road_eqs_carage %>%
              filter(geo == "FR", age == "TOTAL") %>%
              select(time, TOTAL = values),
            by = "time") %>%
  mutate(values = values / TOTAL) %>%
  year_to_date %>%
  ggplot + geom_line(aes(x = date, y = values, color = Age)) +
  theme_minimal() +
  scale_x_date(breaks = as.Date(paste0(seq(2010, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Share of the passenger car fleet, France") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1))

Share of Cars Over 20 Years Old

Code
road_eqs_carage %>%
  filter(geo %in% c("FR", "DE", "ES", "PL"),
         age %in% c("TOTAL", "Y_GT20")) %>%
  select(geo, Geo, age, time, values) %>%
  spread(age, values) %>%
  mutate(values = Y_GT20 / TOTAL) %>%
  year_to_date %>%
  left_join(colors, by = c("Geo" = "country")) %>%
  ggplot + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal() + scale_color_identity() + add_4flags +
  scale_x_date(breaks = as.Date(paste0(seq(2010, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Share of car fleet over 20 years old") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1))