Cooling and heating degree days by country - monthly data - nrg_chdd_m

Data - Eurostat

Info

Last observation: 2025M12 (N = 62)

First observation: 1980M01 (N = 62)

Last data update: 14 aoû 2026, 22:21. Last compile: 18 aoû 2026, 03:14

Structure

Cooling degree days

France, Germany, Italy, Spain

Code
nrg_chdd_m |>
  filter(geo %in% c("FR", "DE", "IT", "ES"),
         indic_nrg == "CDD") |>
  month_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_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1980, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Cooling degree days") +
  scale_y_continuous(breaks = seq(0, 400, 50))

2015-

Code
nrg_chdd_m |>
  filter(geo %in% c("FR", "DE", "IT", "ES"),
         indic_nrg == "CDD") |>
  month_to_date() |>
  filter(date >= as.Date("2015-01-01")) |>
  left_join(colors, by = c("Geo" = "country")) |>
  ggplot() + geom_line(aes(x = date, y = values, color = color)) +
  theme_minimal() + scale_color_identity() + add_flags +
  scale_x_date(breaks = as.Date(paste0(seq(1980, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  xlab("") + ylab("Cooling degree days") +
  scale_y_continuous(breaks = seq(0, 400, 50))

Heating degree days

Germany

All

Code
nrg_chdd_m |>
  filter(geo == "DE",
         indic_nrg == "HDD") |>
  month_to_date() |>
  ggplot() + geom_line(aes(x = date, y = values)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) + 
  scale_y_continuous(breaks = seq(0, 1000, 100))

2015-

Code
nrg_chdd_m |>
  filter(geo == "DE",
         indic_nrg == "HDD") |>
  month_to_date() |>
  filter(date >= as.Date("2015-01-01")) |>
  ggplot() + geom_line(aes(x = date, y = values)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 1), "-01-01")),
               labels = date_format("%Y")) + 
  scale_y_continuous(breaks = seq(0, 1000, 100))