# Build multi languages plots for annual and winter NAO # based on CRU data. # # Used for https://commons.wikimedia.org/wiki/Template:Other_versions/NAO_winter # e.g. https://commons.wikimedia.org/wiki/File:Winter-NAO-Index.svg # See https://commons.wikimedia.org/wiki/Template:Other_versions/NAO_winter.R to edit this file library(dplyr) library(readr) library(tidyr) library(ggplot2) library(stringr) library(glue) theme_set(theme_bw()) theme_update(plot.caption = element_text(size = 7)) oldDec <- getOption("OutDec") # get data : winter and annual # add sign column for colors nao_cru <- "https://crudata.uea.ac.uk/cru/data/nao/nao.dat" %>% read_table(col_types = "iddddddddddddd", na = "-99.99", col_names = c("year", 1:12, "annual")) %>% pivot_longer(-1, names_to = "period", values_to = "nao") nao_cru_djfm <- nao_cru %>% filter(period %in% c("12", "1", "2", "3")) %>% mutate(winter = if_else(period == "12", paste(year, year + 1, sep = "-"), paste(year - 1, year, sep = "-"))) %>% group_by(winter) %>% summarise(nao = mean(nao, na.rm = TRUE)) %>% mutate(year = as.numeric(str_extract(winter, "^\\d{4}")), sign = if_else(nao < 0, "negative", "positive")) %>% filter(year > 1822) nao_cru_annual <- nao_cru %>% filter(period == "annual") %>% mutate(sign = if_else(nao < 0, "negative", "positive")) %>% filter(year > 1822) # manage languages language <- list( es_ES = list( winter = list( data = nao_cru_djfm, title = "Índice de invierno de la Oscilación del Atlántico Norte (NAO)", subtitle = "Gibraltar - SW de Islandia, de diciembre a marzo", caption = "https://w.wiki/4b$m\nData : Climatic Research Unit, University of East Anglia.\nJones, P.D., Jónsson, T. y Wheeler, D. (1997)\nActualizado regularmente. Accedido a", x = "Año", y = "Diferencia de presión normalizada a nivel del mar (hPa)", outDec = "." ), annual = list( data = nao_cru_annual, title = "Índice anual de la Oscilación del Atlántico Norte (NAO)", subtitle = "Gibraltar - SW de Islandia", caption = "Data : Climatic Research Unit, University of East Anglia.\nJones, P.D., Jónsson, T. y Wheeler, D. (1997)\nActualizado regularmente. Accedido a", x = "Año", y = "Diferencia de presión normalizada a nivel del mar (hPa)", outDec = "." ) ), de_DE = list( winter = list( data = nao_cru_djfm, title = "Nordatlantischen Oszillation (NAO) Winter Index", subtitle = "Gibraltar - SW Island, Dezember bis März", caption = "https://w.wiki/4b$m\nDatei : Climatic Research Unit, University of East Anglia.\nJones, P.D., Jónsson, T. und Wheeler, D. (1997)\nRegelmäßig aktualisiert. Zugänglich am", x = "Jahre", y = "Differenz der standardisierten Luftdruck (hPa)", outDec = "," ), annual = list( data = nao_cru_annual, title = "Nordatlantischen Oszillation (NAO) Index", subtitle = "Gibraltar - SW Island", caption = "Datei : Climatic Research Unit, University of East Anglia.\nJones, P.D., Jónsson, T. und Wheeler, D. (1997)\nRegelmäßig aktualisiert. Zugänglich am", x = "Jahre", y = "Differenz der standardisierten Luftdruck (hPa)", outDec = "," ) ), en_US = list( winter = list( data = nao_cru_djfm, title = "North Atlantic Oscillation (NAO) winter index", subtitle = "Gibraltar - SW Iceland, December to March", caption = "https://w.wiki/4b$m\nData : Climatic Research Unit, University of East Anglia.\nJones, P.D., Jónsson, T. and Wheeler, D. (1997)\nUpdated regularly. Accessed", x = "Year", y = "Difference of normalized sea level pressure (hPa)", outDec = "." ), annual = list( data = nao_cru_annual, title = "North Atlantic Oscillation (NAO) annual index", subtitle = "Gibraltar - SW Iceland", caption = "Data : Climatic Research Unit, University of East Anglia.\nJones, P.D., Jónsson, T. and Wheeler, D. (1997)\nUpdated regularly. Accessed", x = "Year", y = "Difference of normalized sea level pressure (hPa)", outDec = "." ) ), fr_FR = list( winter = list( data = nao_cru_djfm, title = "Indice hivernal de l'oscillation nord-atlantique (ONA)", subtitle = "Gibraltar - SW Islande, décembre à mars", caption = "https://w.wiki/4b$m\nDonnées : Climatic Research Unit, University of East Anglia.\nJones, P.D., Jónsson, T. et Wheeler, D. (1997)\nMise à jour régulière. Accédé le", x = "année", y = "différence de pression normalisée (hPa)", outDec = "," ), annual = list( data = nao_cru_annual, title = "Indice annuel de l'oscillation nord-atlantique (ONA)", subtitle = "Gibraltar - SW Islande", caption = "Données : Climatic Research Unit, University of East Anglia.\nJones, P.D., Jónsson, T. et Wheeler, D. (1997)\nMise à jour régulière. Accédé le", x = "année", y = "différence de pression normalisée (hPa)", outDec = "," ) ), it_IT = list( winter = list( data = nao_cru_djfm, title = "Indice invernale dell'Oscillazione Nord Atlantica (NAO)", subtitle = "Gibilterra - SW Islanda, da dicembre a marzo", caption = "https://w.wiki/4b$m\nDati : Climatic Research Unit, University of East Anglia.\nJones, P.D., Jónsson, T. e Wheeler, D. (1997)\nAggiornato regolarmente. Accesso a", x = "Anno", y = "Differenza di pressione normalizzata\nal livello del mare (hPa)", outDec = "," ), annual = list( data = nao_cru_annual, title = "Indice annuale dell'Oscillazione Nord Atlantica (NAO)", subtitle = "Gibilterra - SW Islanda", caption = "Dati : Climatic Research Unit, University of East Anglia.\nJones, P.D., Jónsson, T. e Wheeler, D. (1997)\nAggiornato regolarmente. Accesso a", x = "Anno", y = "Differenza di pressione normalizzata\nal livello del mare (hPa)", outDec = "," ) ) ) for (l in names(language)) { message(l) for (t in names(language[[l]])) { message(t) current <- language[[l]][[t]] options(OutDec = current$outDec) # plot graph ggplot(current$data, aes(year, nao)) + geom_col(aes(fill = sign)) + geom_smooth(span = .1, color = "black", alpha = 0.3) + scale_fill_manual(values = c("positive" = "darkorange2", "negative" = "deepskyblue3")) + scale_x_continuous(breaks = seq(1820, max(current$data$year), 20)) + guides(fill = "none") + labs(title = current$title, subtitle = current$subtitle, caption = glue("{current$caption} {format(Sys.Date(), '%Y-%m-%d')}"), x = current$x, y = current$y) ggsave(file = glue("nao_cru_{t}_{l}_{Sys.Date()}.svg"), width = 20, height = 12.4, units = "cm", scale = 0.8, device = svg) } } options(OutDec = oldDec)