Nothing
## ----global_options, include = FALSE------------------------------------------
knitr::opts_chunk$set(fig.width = 4, fig.align = 'center',
echo = TRUE, warning = FALSE, message = FALSE,
eval = FALSE, tidy = FALSE)
## ----load-pkg-----------------------------------------------------------------
# library(dplyr) # For basic data manipulation
# library(ggplot2) # For visualising data
# library(heatwaveR) # For detecting MHWs
# library(tidync) # For easily dealing with NetCDF data
# library(doParallel) # For parallel processing
## ----load-data----------------------------------------------------------------
# OISST <- readRDS("~/Desktop/OISST_vignette.Rds")
## ----detect-func--------------------------------------------------------------
# event_only <- function(df){
# # First calculate the climatologies
# clim <- ts2clm(data = df, climatologyPeriod = c("1982-01-01", "2011-01-01"))
# # Then the events
# event <- detect_event(data = clim)
# # Return only the event metric dataframe of results
# return(event$event)
# }
## ----detect-purrr-------------------------------------------------------------
# system.time(
# # First we start by choosing the 'OISST' dataframe
# MHW_dplyr <- OISST %>%
# # Then we group the data by the 'lon' and 'lat' columns
# group_by(lon, lat) %>%
# # Then we run our MHW detecting function on each group
# group_modify(~event_only(.x))
# ) # ~123 seconds
## ----detect-plyr--------------------------------------------------------------
# # NB: One should never use ALL available cores, save at least 1 for other essential tasks
# # The computer I'm writing this vignette on has 8 cores, so I use 7 here
# registerDoParallel(cores = 7)
#
# # Detect events
# system.time(
# MHW_plyr <- plyr::ddply(.data = OISST, .variables = c("lon", "lat"), .fun = event_only, .parallel = TRUE)
# ) # 33 seconds
## ----lon-files----------------------------------------------------------------
# for(i in 1:length(unique(OISST$lon))){
# OISST_sub <- OISST %>%
# filter(lon == unique(lon)[i])
# saveRDS(object = OISST_sub, file = paste0("~/Desktop/OISST_lon_",i,".Rds"))
# }
## ----detect-both--------------------------------------------------------------
# # The 'dplyr' wrapper function to pass to 'plyr'
# dplyr_wraper <- function(file_name){
# MHW_dplyr <- readRDS(file_name) %>%
# group_by(lon, lat) %>%
# group_modify(~event_only(.x))
# }
# # Create a vector of the files we want to use
# OISST_files <- dir("~/Desktop", pattern = "OISST_lon_*", full.names = T)
#
# # Use 'plyr' technique to run 'dplyr' technique with multiple cores
# system.time(
# MHW_result <- plyr::ldply(OISST_files, .fun = dplyr_wraper, .parallel = T)
# ) # 31 seconds
#
# # Save for later use as desired
# saveRDS(MHW_result, "~/Desktop/MHW_result.Rds")
## ----event-tally--------------------------------------------------------------
# # summarise the number of unique longitude, latitude and year combination:
# OISST_n <- MHW_result %>%
# mutate(year = lubridate::year(date_start)) %>%
# group_by(lon, lat, year) %>%
# summarise(n = n(), .groups = "drop") %>%
# group_by(lon, lat) %>%
# tidyr::complete(year = c(1982:2019)) %>% # Note that these dates may differ
# mutate(n = ifelse(is.na(n), 0, n))
# head(OISST_n)
## ----trend-fun----------------------------------------------------------------
# lin_fun <- function(ev) {
# mod1 <- glm(n ~ year, family = poisson(link = "log"), data = ev)
# # extract slope coefficient and its p-value
# tr <- data.frame(slope = summary(mod1)$coefficients[2,1],
# p = summary(mod1)$coefficients[2,4])
# return(tr)
# }
## ----apply-trend-fun-plyr-----------------------------------------------------
# OISST_nTrend <- plyr::ddply(OISST_n, c("lon", "lat"), lin_fun, .parallel = T)
# OISST_nTrend$pval <- cut(OISST_nTrend$p, breaks = c(0, 0.001, 0.01, 0.05, 1))
# head(OISST_nTrend)
## ----prep-geography-----------------------------------------------------------
# # The base map
# map_base <- ggplot2::fortify(maps::map(fill = TRUE, plot = FALSE)) %>%
# dplyr::rename(lon = long)
## ----the-figure---------------------------------------------------------------
# map_slope <- ggplot(OISST_nTrend, aes(x = lon, y = lat)) +
# geom_rect(size = 0.2, fill = NA,
# aes(xmin = lon - 0.1, xmax = lon + 0.1, ymin = lat - 0.1, ymax = lat + 0.1,
# colour = pval)) +
# geom_raster(aes(fill = slope), interpolate = FALSE, alpha = 0.9) +
# scale_fill_gradient2(name = "count/year (slope)", high = "red", mid = "white",
# low = "darkblue", midpoint = 0,
# guide = guide_colourbar(direction = "horizontal",
# title.position = "top")) +
# scale_colour_manual(breaks = c("(0,0.001]", "(0.001,0.01]", "(0.01,0.05]", "(0.05,1]"),
# values = c("firebrick1", "firebrick2", "firebrick3", "white"),
# name = "p-value", guide = FALSE) +
# geom_polygon(data = map_base, aes(group = group),
# colour = NA, fill = "grey80") +
# coord_fixed(ratio = 1, xlim = c(13.0, 23.0), ylim = c(-33, -42), expand = TRUE) +
# labs(x = "", y = "") +
# theme_bw() +
# theme(legend.position = "bottom")
#
# map_p <- ggplot(OISST_nTrend, aes(x = lon, y = lat)) +
# geom_raster(aes(fill = pval), interpolate = FALSE) +
# scale_fill_manual(breaks = c("(0,0.001]", "(0.001,0.01]", "(0.01,0.05]",
# "(0.05,0.1]", "(0.1,0.5]", "(0.5,1]"),
# values = c("black", "grey20", "grey40",
# "grey80", "grey90", "white"),
# name = "p-value",
# guide = guide_legend(direction = "horizontal",
# title.position = "top")) +
# geom_polygon(data = map_base, aes(group = group),
# colour = NA, fill = "grey80") +
# coord_fixed(ratio = 1, xlim = c(13.0, 23.0), ylim = c(-33, -42), expand = TRUE) +
# labs(x = "", y = "") +
# theme_bw() +
# theme(legend.position = "bottom")
#
# map_both <- ggpubr::ggarrange(map_slope, map_p, align = "hv")
# map_both
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.