This R Markdown document is made interactive using Shiny. Unlike the more traditional workflow of creating static reports, you can now create documents that allow your readers to change the assumptions underlying your analysis and see the results immediately.
To learn more, see Interactive Documents.
# load required libs if(!require(DataBaseAlpEnvEURAC)) { if(!require(devtools)) { install.packages("devtools") library(devtools) } install.packages("DataBaseAlpEnvEURAC") library(DataBaseAlpEnvEURAC) } if(!require(raster)) { install.packages("raster") library(raster) } if(!require(data.table)) { install.packages("data.table") library(data.table) } if(!require(dplyr)) { install.packages("dplyr") library(dplyr) } if(!require(tidyr)) { install.packages("tidyr") library(tidyr) } if(!require(leaflet)) { install.packages("leaflet") library(leaflet) } if(!require(zoo)) { install.packages("zoo") library(zoo) } if(!require(dygraphs)) { install.packages("dygraphs") library(dygraphs) } if(!require(rgdal)) { install.packages("rgdal") library(rgdal) } if(!require(chron)) { install.packages("chron") library(chron) } if(!require(d3heatmap)) { install.packages("d3heatmap") library(d3heatmap) }
# load data #simpath <- "/run/user/1000/gvfs/smb-share:server=sdcalp01.eurac.edu,share=data2//Simulations/Simulation_GEOtop_1_225_ZH/Vinschgau/SimTraining/BrJ/Mazia/toposub/sim/1d/1d_001/000004" simpath <- "/home/jbr/Schreibtisch/topotestdata" # meta info Mazia stations data("station_meta") station_meta <- station_meta[c(2,3,16,18:21),] xy <- project(xy=cbind(station_meta$x,station_meta$y), proj = "+proj=utm +zone=32 ellps=WGS84", inv = T) station_meta$long <- xy[,1] station_meta$lat <- xy[,2] # toposub setup setup <- read.csv(file.path(simpath, "setup.txt"), header = FALSE) Nclust <- setup[setup$V2=="Nclust",3] locations <- read.csv(file.path(simpath, "locations.txt"), header = FALSE) # load simulation data - points load(file.path(simpath, "data.RData")) dates <- sort(format(as.Date(substr(unique(data_00004$Date12_DDMMYYYYhhmm_),1,10), "%d/%m/%Y"), "%Y-%m-%d")) # read landform to rst landform <- raster(x = file.path(simpath, paste("landform_", Nclust, ".asc", sep=""))) landfval <- getValues(landform) landform[] <- ifelse(landfval==landfval[1], NA, landfval) elevation <- raster(x = file.path(simpath, "INmaps10", "dem.asc")) landcover <- raster(x = file.path(simpath, "INmaps10", "landcover.asc")) #soil <- raster(x = file.path(simpath, "INmaps10", "soil.asc")) # listpoints table listpoints <- read.csv(file.path(simpath, "listpoints.txt")) toDel <- which.max(listpoints$members) listpoints <- listpoints[listpoints$id!=toDel,] data_00004 <- data_00004[IDpoint!=toDel,]
inputPanel( # choose variable selectInput(inputId = "Variable", label = "Variable to investigate:", choices = names(data_00004)[-c(1:4)], selected = names(data_00004)[-c(1:4)][1]), # choose point ID selectInput(inputId = "IDpoint", label = "ID of point simulation:", choices = unique(data_00004$IDpoint), selected = 1), # choose start day / end day dateInput(inputId = "start", label = "Select Start Date", value = "2070-01-01", min = dates[1], max = tail(dates,1), startview = "year"), dateInput(inputId = "end", label = "Select End Date", value = "2099-12-31", min = dates[1], max = tail(dates,1), startview = "year"), # choose aggregation function selectInput(inputId = "Aggregation", label = "Function to aggregate:", choices = c("mean", "sum", "max", "min", "sd"), selected = "mean"), # smoothing of map? radioButtons(inputId = "Interpolate", label = "Smooth Map", choices = c("YES","NO"), selected = "YES", inline = FALSE), submitButton(text = "Apply Changes", icon("refresh")) ) # get data # output$date <- renderUI({ # seq(as.Date(input$start, "%Y-%m-%d"), as.Date(input$end, "%Y-%m-%d"), 1) # }) # output$map <- renderUI({ # varnr <- which(names(data_00004) == input$Variable) # num_start <- as.numeric(as.Date(input$start, "%Y-%m-%d")); num_end <- as.numeric(as.Date(input$end, "%Y-%m-%d")) # # data_var <- data_00004[,c(1,4,varnr),with=F] # data_var[,Date12_DDMMYYYYhhmm_ := as.numeric(as.Date(substr(Date12_DDMMYYYYhhmm_,1,10), "%d/%m/%Y"))] # # data_ <- # data_var %>% # setnames(old = names(data_var), new = c("Date","IDpoint","VAR")) %>% # filter(Date >= num_start & Date <= num_end) %>% # group_by(IDpoint) %>% # summarise_each(funs_(input$Aggregation)) # # subs_df <- as.data.frame(data_[,c(1,3), with=F]) # rst <- subs(landform,subs_df) # # if(input$Aggregation=="YES") rst <- focal(rst, w=matrix(1, 7, 7), mean) # # rst # }) # # output$ts <- renderUI({ # varnr <- which(names(data_00004) == input$Variable) # date <- as.Date(substr(data_00004$Date12_DDMMYYYYhhmm_[data_00004$IDpoint==input$IDpoint],1,10), "%d/%m/%Y") # datazoo <- zoo(data_00004[data_00004$IDpoint==input$IDpoint,input$Variable, with=F], date) # datazoo_win <- window(datazoo, start = as.Date(input$start,"%Y-%m-%d"), end = as.Date(input$end,"%Y-%m-%d")) # datazoo_win # )}
renderDataTable({ as.data.table(round(listpoints,2)) }, options = list(pageLength=5, lengthMenu=c(5, 10, 15, 20, 50, 100)) )
Anomaly of variable for a specific climate period (see choices above) compared to baseline (1970-2000).
# Mapping renderLeaflet({ varnr <- which(names(data_00004) == input$Variable) num_start <- as.numeric(as.Date(input$start, "%Y-%m-%d")); num_end <- as.numeric(as.Date(input$end, "%Y-%m-%d")) num_start_baseline <- as.numeric(as.Date("1970-01-01", "%Y-%m-%d")) num_end_baseline <- as.numeric(as.Date("1999-12-31", "%Y-%m-%d")) data_var <- data_00004[,c(1,4,varnr),with=F] data_var[,Date12_DDMMYYYYhhmm_ := as.numeric(as.Date(substr(Date12_DDMMYYYYhhmm_,1,10), "%d/%m/%Y"))] data_ <- data_var %>% setnames(old = names(data_var), new = c("Date","IDpoint","VAR")) %>% filter(Date >= num_start & Date <= num_end) %>% group_by(IDpoint) %>% summarise_each(funs_(input$Aggregation)) data_base <- data_var %>% setnames(old = names(data_var), new = c("Date","IDpoint","VAR")) %>% filter(Date >= num_start_baseline & Date <= num_end_baseline) %>% group_by(IDpoint) %>% summarise_each(funs_(input$Aggregation)) data_[, dif := data_$VAR - data_base$VAR] subs_df <- as.data.frame(data_[,c(1,4), with=F]) rst <- subs(landform,subs_df) if(input$Interpolate=="YES") rst <- focal(rst, w=matrix(1, 7, 7), mean) pal1 <- colorNumeric(c("#FFFFCC", "#41B6C4", "#0C2C84"), values(rst), na.color = "transparent") crs(rst) <- "+proj=utm +zone=32 ellps=WGS84" lndf <- landform lndf[] <- ifelse(landfval==input$IDpoint, values(elevation), NA) crs(lndf) <- "+proj=utm +zone=32 ellps=WGS84" pal2 <- colorNumeric(c("#f03b20", "#feb24c", "#ffeda0"), values(lndf), na.color = "transparent") crs(landcover) <- "+proj=utm +zone=32 ellps=WGS84" #crs(soil) <- "+proj=utm +zone=32 ellps=WGS84" leaflet() %>% addProviderTiles("Acetate.terrain", group="Terrain") %>% addTiles(options = providerTileOptions(opacity = 0.3), group = "OSM") %>% # Add default OpenStreetMap map tiles #addRasterImage(soil, opacity = 0.5, group = "Soil") %>% # Add aggregated raster addRasterImage(landcover, opacity = 0.5, group = "Landcover") %>% # Add aggregated raster addRasterImage(rst, colors = pal1, opacity = 0.75, group = "Raster") %>% # Add aggregated raster addRasterImage(lndf, colors = pal2, opacity = 0.4, group = "Landform") %>% # Add aggregated raster addLegend(pal = pal1, values = values(rst), title = input$Variable) %>% #addLegend(pal = pal2, values = values(lndf), title = "m a.s.l.") %>% addCircleMarkers(lng=station_meta$long, lat=station_meta$lat, popup=paste(station_meta$name, ", ", station_meta$h, "m a.s.l"), fill = F, group = "Stations") %>% addLayersControl(position = "topleft" , overlayGroups = c("Terrain", "OSM", "Landcover", "Raster", "Landform", "Stations"), options = layersControlOptions(collapsed = FALSE)) })
Time series on daily scale and yearly anomalies to baseline mean/sum.
# TimeSeries pointID renderDygraph({ varnr <- which(names(data_00004) == input$Variable) date <- as.Date(substr(data_00004$Date12_DDMMYYYYhhmm_[data_00004$IDpoint==input$IDpoint],1,10), "%d/%m/%Y") datazoo <- zoo(data_00004[data_00004$IDpoint==input$IDpoint,input$Variable, with=F], date) # datazoo_win <- window(datazoo, start = as.Date(input$start,"%Y-%m-%d"), end = as.Date(input$end,"%Y-%m-%d")) dygraph(datazoo) %>% dyRangeSelector() %>% dyRoller() }) renderPlot({ varnr <- which(names(data_00004) == input$Variable) date <- as.Date(substr(data_00004$Date12_DDMMYYYYhhmm_[data_00004$IDpoint==input$IDpoint],1,10), "%d/%m/%Y") datazoo <- zoo(data_00004[data_00004$IDpoint==input$IDpoint,input$Variable, with=F], date) #yearly data datazoo_yr <- aggregate(datazoo, years(time(datazoo)), FUN = input$Aggregation) datazoo_yr <- datazoo_yr[-dim(datazoo_yr)[[1]],] datazoo_yr_dev <- datazoo_yr - mean(window(datazoo_yr, start = 1970, end=2000)) # linear filter op <- par(mfrow=c(1,1), las=1) k = c(.5,1,1,1,.5) # k is the vector of weights k = k/sum(k) fTy_dev <- stats::filter(ts(datazoo_yr_dev), sides=2, k) plot(datazoo_yr_dev, type="h", ylab=paste("deviation", input$Variable), xlab="YEAR") points(datazoo_yr_dev, pch=16, cex=.75) lines(fTy_dev, col="red") lines(lowess(datazoo_yr_dev), col="blue", lty="dashed", lwd=3) abline(h=c(-1,0,1,2)) par(op) })
Yearly anomalies to baseline mean/sum.
renderD3heatmap({ # prepare listpoints names(listpoints)[2] <- "IDpoint" # baseline start: 1980-01-01 winstart <- as.numeric(as.Date("1980-01-01")); winend <- as.numeric(as.Date("2010-12-31")) date <- as.Date(substr(data_00004$Date12_DDMMYYYYhhmm_,1,10), "%d/%m/%Y") datenum <- as.numeric(date) year <- years(date) months <- as.numeric(format(date, "%m")) data_00004[,"datenum"] <- datenum data_00004[,"year"] <- year data_00004[,"month"] <- months if (grepl("SWC", input$Variable)) { data_base <- data_00004[datenum>winstart & datenum<winend & month > 3 & month < 11, c("IDpoint",input$Variable), with=F] } else { data_base <- data_00004[datenum>winstart & datenum<winend, c("IDpoint",input$Variable), with=F] } setnames(data_base, names(data_base), c("IDpoint", "VAR")) data_base_summ <- data_base %>% group_by(IDpoint) %>% summarise(meanVAR = mean(VAR)) %>% merge(listpoints, by="IDpoint") data <- data_00004[, c("year","IDpoint",input$Variable), with=F] setnames(data, names(data), c("year", "IDpoint", "VAR")) data_year_mean <- data %>% group_by(year,IDpoint) %>% summarise(meanVAR=mean(VAR)) %>% spread(year,meanVAR) mat <- as.matrix(data_year_mean[, names(data_year_mean)[-1], with=F]) vec <- c(data_base_summ[,"meanVAR", with=F])$meanVAR var_dev <- (mat - vec) var_perc <- var_dev / vec *100 cellnote <- matrix(paste(as.character(round(var_perc,1)), "%; ", as.character(round(var_dev,3)), " UNITs",sep=""), nrow = nrow(var_perc) ,ncol = ncol(var_perc)) #d3heatmap(var_dev[,-dim(var_dev)[[2]]], Rowv=T, Colv=F, scale = "none", cellnote = cellnote[,-dim(var_dev)[[2]]], labRow = paste(listpoints$landcover, "-", round(listpoints$slp,0), "-", round(listpoints$dem,0), sep=" "), dendrogram = "row") d3heatmap(var_perc[,-dim(var_perc)[[2]]], Rowv=T, Colv=F, scale = "none", cellnote = cellnote[,-dim(var_dev)[[2]]], labRow = paste(listpoints$landcover, "-", round(listpoints$slp,0), "-", round(listpoints$dem,0), sep=" "), dendrogram = "row") })
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.