We randomly selected 100 points in hexagonal within the coordinates 7\(^\circ\) and 17\(^\circ\) W, and 59 \(^\circ\) and 63 \(^\circ\) N, to illustrate one approch to get long term climate data in climatrends. We compute the temperature indices from 2000-01-01 to 2019-12-31 using the function temperature() with the method for objects of class ‘sf’. The temperature data is fetched from the NASA Langley Research Center POWER Project funded through the NASA Earth Science Directorate Applied Science Program (https://power.larc.nasa.gov/), using the R package nasapower1. A new implementation of NASAPOWER API disabled calls for more than 366 days. As a turn around we split the years and run the call using a loop. This process can take a while.

library("climatrends")
library("sf")
library("nasapower")
library("ggplot2")
library("patchwork")
library("tidyverse")

# create a polygon within the coordinates 7, 17, 59, 63
e <- matrix(c(7, 59, 17, 59, 17, 63,
              7, 63, 7, 59),
            nrow = 5, ncol = 2, byrow = TRUE)

e <- st_polygon(list(e))
# sample 100 points in the hexagonal type
p <- st_sample(e, 100, type = 'hexagonal')
p <- st_as_sf(p, crs = 4326)

dayone <- paste0(2000:2019, "-01-01")
dayone <- as.Date(dayone, origin = "1970-01-01")

temp <- data.frame()

for (d in seq_along(dayone)) {
  temp_d <- temperature(p, 
                        day.one = dayone[d], 
                        last.day = dayone[d] + 365,
                        timeseries = TRUE,
                        intervals = 365)
  
  temp <- rbind(temp, temp_d)
  
}

We then select the indices CSDI (cold spell duration of night temperature), WSDI (warm spell duration of day temperature), and their associated indices the T10p (the 10th percentile of night temperature) and T90p (the 90th percentile of day temperature), in Figure 1. Plots are generated with ggplot2 and patchwork.

i <- c("CSDI","WSDI")

temp %>% 
  filter(index %in% i) %>% 
  group_by(index) %>% 
  mutate(ab = mean(value)) %>% 
  ggplot() +
  geom_line(aes(x = date, y = value, group = id)) + 
  geom_hline(aes(yintercept = ab), colour = "red", lwd = 0.7) +
  geom_smooth(aes(x = date, y = value), method = "loess", se = FALSE) +
  facet_wrap(. ~ index, scales = "free") +
  labs(x = "", y = "Index (days)") +
  theme(axis.text.y = element_text(size = 12, angle = 0, hjust = 1, 
                                   vjust = 0.5, face = "plain", colour = "black"),
        axis.text.x = element_text(size = 12, angle = 0, hjust = 0.5, 
                                   vjust = 1, face = "plain", colour = "black"),
        axis.title = element_text(size = 12, face = "plain"),
        panel.border = element_rect(colour = "black", fill=NA, size=0.5),
        plot.background = element_blank(),
        panel.background = element_blank(),
        strip.text.x = element_text(size = 12, colour = "black"),
        strip.text.y = element_text(size = 12, colour = "black"),
        strip.background = element_rect(colour = "black", fill="#FFFFFF")) ->
  gg1

gg1


i <- c("T10p","T90p")


temp %>% 
  filter(index %in% i) %>% 
  group_by(index) %>% 
  mutate(ab = mean(value)) %>% 
  ggplot() +
  geom_line(aes(x = date, y = value, group = id)) + 
  geom_hline(aes(yintercept = ab), colour = "red", lwd = 0.7) +
  geom_smooth(aes(x = date, y = value), method = "loess", se = FALSE) +
  facet_wrap(. ~ index, scales = "free") +
  labs(x = "Year", 
       y = expression(paste('Index (',~degree,'C)',sep=''))) +
  theme(axis.text.y = element_text(size = 12, angle = 0, hjust = 1, 
                                   vjust = 0.5, face = "plain", colour = "black"),
        axis.text.x = element_text(size = 12, angle = 0, hjust = 0.5, 
                                   vjust = 1, face = "plain", colour = "black"),
        axis.title = element_text(size = 12, face = "bold"),
        panel.border = element_rect(colour = "black", fill=NA, size=0.5),
        plot.background = element_blank(),
        panel.background = element_blank(),
        strip.text.x = element_text(size = 12, colour = "black"),
        strip.text.y = element_text(size = 12, colour = "black"),
        strip.background = element_rect(colour = "black", fill="#FFFFFF")) ->
  gg2

gg2


pl <- gg1 / gg2

The trends show a decrease in the cold spell duration (number of consecutive cold nights bellow the 10th percentile) and warm spell duration (number of consecutive warm days above the 90th percentile). However, the values of the percentiles show an increase over the time series. The T10p index shows a decrease around the year of 2010, but again rises up to the a value around the -10 \(^\circ\)C, meaning that the cold nights are becoming a bit warmer over the time. The T90p index also shows an increase in the temperature across the sampled area, with the average 90th percentile rising from ~ 16 \(^\circ\)C to ~ 18 \(^\circ\)C over the time series.

References

1.