#R code for creating ggplots of time series with smooth (GAM) and linear term ###################### #Import Libraries and set working directory ###################### library(zoo) library(hydroTSM) #you need to install these packages first before you can load them here library(lubridate) library(mgcv) library(ggplot2) library(gridExtra) library(scales) options(scipen=999) setwd("C:/Users/z5025317/OneDrive - UNSW/WRL_Postdoc_Manual_Backup/WRL_Postdoc/Projects/Paper#1/") ###################### ###################### #Set inputs ###################### Case.Study <- "CASESTUDY2" Estuary <- "RICHMOND" Riv.Gauge.loc <- "OAKLANDROAD" #GRETA Est.Gauge.loc <- "CORAKI" #"RAYMONDTERRACE" # "HEXHAMBRIDGE" logtransformFlow <- TRUE ggplotGAM.k <- 15 rivTempGAM.k <- 20 Version <- 'V2' ###################### ###################### Output.Directory <- paste('./Output/', Case.Study, '/', Estuary,'/Recent_Trends/Riv_', Riv.Gauge.loc,'_Est_',Est.Gauge.loc,'_GAMk', ggplotGAM.k, '/', sep="") if (file.exists(Output.Directory)){ print('output folder already existed and was not created again') } else { dir.create(file.path(Output.Directory)) print('output folder did not exist and was created') } ###################### ###################### #Set input file paths ###################### pattern = paste('SILO_climdata_', Estuary,'*', sep="") AirT_CSV_Path <- list.files(paste("./Data/SILO/",Case.Study, '/',sep=""), pattern, full.names=T, recursive=T) pattern = paste(Estuary,'@', Riv.Gauge.loc, '.*.ALL.csv', sep="") RivT_CSV_Path <- list.files("./Data/River_Gauge_Data/", pattern, full.names=T) pattern = paste(Estuary,'@', Est.Gauge.loc, '.*.ALL.csv', sep="") EstT_CSV_Path <- list.files("./Data/River_Gauge_Data/", pattern, full.names=T) pattern = paste('sstmean_NNRP_', Estuary,'*', sep="") SST_CSV_Path <- list.files(paste("./Data/NARCLIM_Site_CSVs/",Case.Study, '/', sep=""), pattern, full.names=T, recursive=T) ###################### ###################### #Analyse ###################### ############tasmean #Load a daily (no gaps) time series as a time serie baseline for other time series used here AirT.df <- data.frame(read.csv(AirT_CSV_Path)) AirT.full.TS <- zoo((AirT.df$max_temp_Celsius + AirT.df$max_temp_Celsius)/2, order.by= as.Date(AirT.df[,"date"], format = "%Y-%m-%d")) #=daily time series of rainfall for creation of clean, daily TS of ET and Q AirT.TS <- window(AirT.full.TS, start=as.Date("1990-01-01"), end=as.Date("2018-01-01")) AirT.full.df <- data.frame(AirT.full.TS) AirT.df <- data.frame(AirT.TS) colnames(AirT.df) <- 'tasmean' colnames(AirT.full.df) <- 'tasmean' ############ AirT.df$Julday1 <- seq(1,length(AirT.df[,1]),1) linear.trend.model_EC_all <- lm(tasmean ~ Julday1, AirT.df) AirT.pvalNCV_ECall <- summary(linear.trend.model_EC_all )$coefficients[2,4] AirT.lintrend <- summary(linear.trend.model_EC_all )$coefficients[2,1] * 356 ############ AirT.full.df$Julday1 <- seq(1,length(AirT.full.df[,1]),1) linear.trend.model_EC_all <- lm(tasmean ~ Julday1, AirT.full.df) AirT.full.pvalNCV_ECall <- summary(linear.trend.model_EC_all )$coefficients[2,4] AirT.full.lintrend <- summary(linear.trend.model_EC_all )$coefficients[2,1] * 356 ############tasmean ############River temp #Load a daily (no gaps) time series as a time serie baseline for other time series used here #Here we use the raw DPI CSV format that comes with a bunch of metadata RivT.df <- data.frame(read.csv(RivT_CSV_Path)) char.df <- data.frame(lapply(RivT.df[2,], as.character), stringsAsFactors=FALSE) #dat <- data.frame(lapply(RivT.df[(4:nrow(RivT.df)),(2:ncol(RivT.df))], as.numeric), stringsAsFactors=FALSE) #dat <- RivT.df.num[!is.na(as.numeric(as.character(RivT.df.num))),] dat <- RivT.df[(4:nrow(RivT.df)),] colnames(dat) <- lapply(RivT.df[2,], as.character) dat$Date <- gsub(x=dat$Date,pattern="00:00:00",replacement="",fixed=T) colnames(dat) <- gsub(x=colnames(dat),pattern="Water Temp(C)",replacement="Temp",fixed=T) RivT.df <- dat rm(dat,char.df) RivT.full.TS <- zoo(as.numeric(as.character(RivT.df$Temp)), order.by= as.Date(RivT.df[,"Date"], format = "%d/%m/%Y")) #=daily time series of rainfall for creation of clean, daily TS of ET and Q RivT.full.TS <- window(RivT.full.TS, start=as.Date("1995-07-01"), end=as.Date("2018-01-01")) RivT.full.TS <- na.approx(RivT.full.TS) RivT.TS <- RivT.full.TS RivT.full.df <- data.frame(RivT.TS) ### This is only done because RivT.df <- data.frame(RivT.TS) colnames(RivT.df) <- 'rivTmean' colnames(RivT.full.df) <- 'rivTmean' ############ RivT.df$Julday1 <- seq(1,length(RivT.df[,1]),1) linear.trend.model_EC_all <- lm(rivTmean ~ Julday1, RivT.df) RivT.pvalNCV_ECall <- summary(linear.trend.model_EC_all )$coefficients[2,4] RivT.lintrend <- summary(linear.trend.model_EC_all )$coefficients[2,1] * 356 RivT.full.df$Julday1 <- seq(1,length(RivT.full.df[,1]),1) linear.trend.model_EC_all <- lm(rivTmean ~ Julday1, RivT.full.df) RivT.full.pvalNCV_ECall <- summary(linear.trend.model_EC_all )$coefficients[2,4] RivT.full.lintrend <- summary(linear.trend.model_EC_all )$coefficients[2,1] * 356 ############River temp ############River flow #Load a daily (no gaps) time series as a time serie baseline for other time series used here #Here we use the raw DPI CSV format that comes with a bunch of metadata RivQ.df <- data.frame(read.csv(RivT_CSV_Path)) char.df <- data.frame(lapply(RivQ.df[2,], as.character), stringsAsFactors=FALSE) dat <- RivQ.df[(4:nrow(RivQ.df)),] colnames(dat) <- lapply(RivQ.df[2,], as.character) dat$Date <- gsub(x=dat$Date,pattern="00:00:00",replacement="",fixed=T) colnames(dat) <- gsub(x=colnames(dat), pattern="Discharge (ML/d)",replacement="Flow",fixed=T) RivQ.df <- dat rm(dat,char.df) #RivQ.full.TS <- zoo(log10((as.numeric(as.character(RivQ.df$Flow))) +1) , order.by= as.Date(RivQ.df[,"Date"], format = "%d/%m/%Y")) #=daily time series of rainfall for creation of clean, daily TS of ET and Q RivQ.full.TS <- zoo(as.numeric(as.character(RivQ.df$Flow)), order.by= as.Date(RivQ.df[,"Date"], format = "%d/%m/%Y")) #=daily time series of rainfall for creation of clean, daily TS of ET and Q RivQ.TS <- window(RivQ.full.TS, start=as.Date("1990-01-01"), end=as.Date("2018-01-01")) RivQ.full.df <- data.frame(RivQ.full.TS) ### This is only done because RivQ.df <- data.frame(RivQ.TS) colnames(RivQ.df) <- 'RivQmean' colnames(RivQ.full.df) <- 'RivQmean' ############trends RivQ.df$Julday1 <- seq(1,length(RivQ.df[,1]),1) linear.trend.model_EC_all <- lm(RivQmean ~ Julday1, RivQ.df) RivQ.pvalNCV_ECall <- summary(linear.trend.model_EC_all )$coefficients[2,4] RivQ.lintrend <- summary(linear.trend.model_EC_all )$coefficients[2,1] * 356 RivQ.full.df$Julday1 <- seq(1,length(RivQ.full.df[,1]),1) linear.trend.model_EC_all <- lm(RivQmean ~ Julday1, RivQ.full.df) RivQ.full.pvalNCV_ECall <- summary(linear.trend.model_EC_all )$coefficients[2,4] RivQ.full.lintrend <- summary(linear.trend.model_EC_all )$coefficients[2,1] * 356 ############River Flow ############ SST #Load a daily (no gaps) time series as a time serie baseline for other time series used here SST.df <- data.frame(read.csv(SST_CSV_Path)) SST.full.TS <- zoo(SST.df$NNRP_R1_1950-273.15, order.by= as.Date(SST.df[,"X"], format = "%Y-%m-%d")) #=daily time series of rainfall for creation of clean, daily TS of ET and Q SST.TS <- window(SST.full.TS, start=as.Date("1990-01-01"), end=as.Date("2018-01-01")) SST.full.df <- data.frame(SST.full.TS) SST.df <- data.frame(SST.TS) str(SST.df) colnames(SST.df) <- 'SSTmean' colnames(SST.full.df) <- 'SSTmean' ############ SST.full.df$Julday1 <- seq(1,length(SST.full.df[,1]),1) linear.trend.model_EC_all <- lm(SSTmean ~ Julday1, SST.full.df) SST.full.pvalNCV_ECall <- summary(linear.trend.model_EC_all)$coefficients[2,4] SST.full.lintrend <- summary(linear.trend.model_EC_all)$coefficients[2,1] * 356 SST.df$Julday1 <- seq(1,length(SST.df[,1]),1) linear.trend.model_EC_all2 <- lm(SSTmean ~ Julday1, SST.df) SST.pvalNCV_ECall <- summary(linear.trend.model_EC_all2)$coefficients[2,4] SST.lintrend <- summary(linear.trend.model_EC_all2)$coefficients[2,1] * 356 ############ SST ############Estuary temp #Load a daily (no gaps) time series as a time serie baseline for other time series used here #Here we use the raw DPI CSV format that comes with a bunch of metadata EstT.df <- data.frame(read.csv(EstT_CSV_Path)) char.df <- data.frame(lapply(EstT.df[2,], as.character), stringsAsFactors=FALSE) #dat <- data.frame(lapply(EstT.df[(4:nrow(EstT.df)),(2:ncol(EstT.df))], as.numeric), stringsAsFactors=FALSE) #dat <- EstT.df.num[!is.na(as.numeric(as.character(EstT.df.num))),] dat <- EstT.df[(4:nrow(EstT.df)),] colnames(dat) <- lapply(EstT.df[2,], as.character) dat$Date <- gsub(x=dat$Date,pattern="00:00:00",replacement="",fixed=T) colnames(dat) <- gsub(x=colnames(dat),pattern="Water Temp(C)",replacement="Temp",fixed=T) EstT.df <- dat rm(dat,char.df) #replace negative values with NA EstT.df$Temp <- replace(EstT.df$Temp, which(as.numeric(as.character(EstT.df$Temp)) < 11), NA) EstT.full.TS <- zoo(as.numeric(as.character(EstT.df$Temp)), order.by= as.Date(EstT.df[,"Date"], format = "%d/%m/%Y")) #=daily time series of rainfall for creation of clean, daily TS of ET and Q plot(EstT.full.TS) EstT.TS <- window(EstT.full.TS, start=as.Date("2013-06-01"), end=as.Date("2018-01-01")) EstT.full.TS <- EstT.TS EstT.full.df <- data.frame(EstT.TS) ### This is only done because of poor data at beginning EstT.df <- data.frame(EstT.TS) colnames(EstT.df) <- 'EstTmean' colnames(EstT.full.df) <- 'EstTmean' ############ EstT.df$Julday1 <- seq(1,length(EstT.df[,1]),1) linear.trend.model_EC_all <- lm(EstTmean ~ Julday1, EstT.df) EstT.pvalNCV_ECall <- summary(linear.trend.model_EC_all )$coefficients[2,4] EstT.lintrend <- summary(linear.trend.model_EC_all )$coefficients[2,1] * 356 EstT.full.df$Julday1 <- seq(1,length(EstT.full.df[,1]),1) linear.trend.model_EC_all <- lm(EstTmean ~ Julday1, EstT.full.df) EstT.full.pvalNCV_ECall <- summary(linear.trend.model_EC_all )$coefficients[2,4] EstT.full.lintrend <- summary(linear.trend.model_EC_all )$coefficients[2,1] * 356 ############Est temp ###################### #Plot ###################### ##################################### Full Time Period #Air temp Full period p1air <- ggplot(AirT.full.df, aes(y=tasmean, x=index(AirT.full.TS))) + geom_line(alpha=0.5) + ggtitle(paste(Estuary," Catchment Centroid - Linear and smooth trend in catchment airT (SILO) lin trend was ", round(AirT.full.lintrend,3), ' C°/year with p=', round(AirT.full.pvalNCV_ECall,10), sep=" ")) + theme(plot.title=element_text(face="bold", size=9)) + geom_smooth(method='lm',fill="green", formula=y~x, colour="darkgreen", size = 0.5) + stat_smooth(method=gam, formula=y~s(x, k=ggplotGAM.k), se=T, size=0.5) + ylab("Air Temperature [C°]") + xlab("Time") p1riv <- ggplot(RivT.full.df, aes(y=rivTmean, x=index(RivT.TS))) + geom_line(alpha=0.5) + ggtitle(paste(Estuary,'@', Riv.Gauge.loc, " - Linear and smooth trend in river temperature (GAUGE) lin trend was ", round(RivT.full.lintrend,3), ' C°/year with p=', round(RivT.full.pvalNCV_ECall,10), sep=" ")) + theme(plot.title=element_text(face="bold", size=9)) + geom_smooth(method='lm',fill="green", formula=y~x, colour="darkgreen", size = 0.5) + stat_smooth(method=gam, formula=y~s(x, k=ggplotGAM.k), se=T, size=0.5) + ylab("River Temperature [C°]") + xlab("Time") if(logtransformFlow ==TRUE){ p1rivQ <- ggplot(RivQ.full.df, aes(y=log10(RivQmean+2), x=index(RivQ.full.TS))) + geom_line(alpha=0.5) + ggtitle(paste(Estuary,'@', Riv.Gauge.loc, " - Linear and smooth trend in river flow (GAUGE) lin trend was ", round(RivQ.full.lintrend,3), ' ML/day /year with p=', round(RivQ.full.pvalNCV_ECall,10), sep=" ")) + theme(plot.title=element_text(face="bold", size=9)) + geom_smooth(method='lm',fill="green", formula=y~x, colour="darkgreen", size = 0.5) + stat_smooth(method=gam, formula=y~s(x, k=ggplotGAM.k), se=T, size=0.5) + ylab(expression(paste("log10(River Flow [ML/day] + 2)", sep=""))) + xlab("Time") } else { p1rivQ <- ggplot(RivQ.full.df, aes(y=RivQmean, x=index(RivQ.full.TS))) + geom_line(alpha=0.5) + ggtitle(paste(Estuary,'@', Riv.Gauge.loc, " - Linear and smooth trend in river flow (GAUGE) lin trend was ", round(RivQ.full.lintrend,3), ' ML/day with p=', round(RivQ.full.pvalNCV_ECall,10), sep=" ")) + theme(plot.title=element_text(face="bold", size=9)) + geom_smooth(method='lm',fill="green", formula=y~x, colour="darkgreen", size = 0.5) + stat_smooth(method=gam, formula=y~s(x, k=ggplotGAM.k), se=T, size=0.5) + ylab(expression(paste("River Flow [ML/day]", sep=""))) + xlab("Time") } #Sea temp Full period p1sst <- ggplot(SST.full.df, aes(y=SSTmean, x=index(SST.full.TS))) + geom_line(alpha=0.5) + ggtitle(paste(Estuary, "NNRP (NARCLIM reanalysis) - Linear and smooth trend in sea surface temperature (NNRP) lin trend was ", round(SST.full.lintrend,3), ' C°/year with p=', round(SST.full.pvalNCV_ECall,10), sep=" ")) + theme(plot.title=element_text(face="bold", size=9)) + geom_smooth(method='lm',fill="green", formula=y~x, colour="darkgreen", size = 0.5) + stat_smooth(method=gam, formula=y~s(x, k=ggplotGAM.k), se=T, size=0.5) + ylab("Sea Surface Temperature [C°]") + xlab("Time") p1Est <- ggplot(EstT.full.df, aes(y=EstTmean, x=index(EstT.TS))) + geom_line(alpha=0.5) + ggtitle(paste(Estuary,'@', Est.Gauge.loc, " - Linear and smooth trend in Estuary temperature (GAUGE) lin trend was ", round(EstT.full.lintrend,3), ' C°/year with p=', round(EstT.full.pvalNCV_ECall,10), sep=" ")) + theme(plot.title=element_text(face="bold", size=9)) + geom_smooth(method='lm',fill="green", formula=y~x, colour="darkgreen", size = 0.5) + stat_smooth(method=gam, formula=y~s(x, k=ggplotGAM.k), se=T, size=0.5) + ylab("Estuary Temperature [C°]") + xlab("Time") #export to png png.name <- paste(Output.Directory, Estuary, '@', Riv.Gauge.loc, '_Trends_tasmean_full_period_', Sys.Date(),".png", sep="") png(file = png.name, width = 10.5, height = 7, units='in', res=500) grid.arrange(p1air,ncol=1) dev.off() png.name <- paste(Output.Directory, Estuary, '@', Riv.Gauge.loc, '_Trends_rivTmean_full_period_', Sys.Date(),".png", sep="") png(file = png.name, width = 10.5, height = 7, units='in', res=500) grid.arrange(p1riv,ncol=1) dev.off() png.name <- paste(Output.Directory, Estuary, '@', Riv.Gauge.loc, '_Trends_RivQmean_full_period_', Sys.Date(),".png", sep="") png(file = png.name, width = 10.5, height = 7, units='in', res=500) grid.arrange(p1rivQ,ncol=1) dev.off() png.name <- paste(Output.Directory, Estuary, '@', Riv.Gauge.loc, '_Trends_SSTmean_full_period_', Sys.Date(),".png", sep="") png(file = png.name, width = 10.5, height = 7, units='in', res=500) grid.arrange(p1sst,ncol=1) dev.off() png.name <- paste(Output.Directory, Estuary, '@', Est.Gauge.loc, '_Trends_estTmean_full_period_', Sys.Date(),".png", sep="") png(file = png.name, width = 10.5, height = 7, units='in', res=500) grid.arrange(p1Est,ncol=1) dev.off() ##################################### Full Time Period ######################### 1990-present combined.TS <- window(merge(AirT.full.TS, window(RivT.full.TS, start=as.Date("1995-01-01"), end=end(RivT.full.TS)), SST.full.TS,EstT.full.TS,RivQ.full.TS, all=T), start=as.Date("1990-01-01"), end=end(AirT.full.TS)) combined.df <- data.frame(combined.TS) colnames(combined.df) <- c('tasmean','rivTmean', 'SSTmean', 'EstTmean', 'rivQmean') #Air temp p2air <- ggplot(combined.df, aes(y=tasmean, x=index(combined.TS))) + geom_line(alpha=0.5) + ggtitle(paste(Estuary," Catchment centroid - Linear and smooth trend in catchment airT (SILO) lin trend was ", round(AirT.lintrend,3), ' C°/year with p=', round(AirT.pvalNCV_ECall,10), sep=" ")) + theme(plot.title=element_text(face="bold", size=9)) + geom_smooth(method='lm',fill="green", formula=y~x, colour="darkgreen", size = 0.5) + stat_smooth(method=gam, formula=y~s(x, k=ggplotGAM.k), se=T, size=0.5) + ylab("Air Temperature [C°]") + xlab("Time") #Riv temp p2riv <- ggplot(combined.df, aes(y=rivTmean, x=index(combined.TS))) + geom_line(alpha=0.5) + ggtitle(paste(Estuary,'@', Riv.Gauge.loc, " - Linear and smooth trend in river temperature (GAUGE) lin trend was ", round(RivT.lintrend,3), ' C°/year with p=', round(RivT.pvalNCV_ECall,10), sep=" ")) + theme(plot.title=element_text(face="bold", size=9)) + geom_smooth(method='lm',fill="green", formula=y~x, colour="darkgreen", size = 0.5) + stat_smooth(method=gam, formula=y~s(x, k=ggplotGAM.k), se=T, size=0.5) + ylab("River Temperature [C°]") + xlab("Time") #Riv flow if(logtransformFlow ==TRUE){ p2rivQ <- ggplot(combined.df, aes(y=log10(rivQmean+2), x=index(combined.TS))) + geom_line(alpha=0.5) + ggtitle(paste(Estuary,'@', Riv.Gauge.loc, " - Linear and smooth trend in river flow (GAUGE) lin trend was ", round(RivQ.full.lintrend,3), ' ML/day /year with p=', round(RivQ.full.pvalNCV_ECall,10), sep=" ")) + theme(plot.title=element_text(face="bold", size=9)) + geom_smooth(method='lm',fill="green", formula=y~x, colour="darkgreen", size = 0.5) + stat_smooth(method=gam, formula=y~s(x, k=ggplotGAM.k), se=T, size=0.5) + ylab(expression(paste("log10(River Flow [ML/day] + 2)", sep=""))) + xlab("Time") } else { p2rivQ <- ggplot(combined.df, aes(y=rivQmean, x=index(combined.TS))) + geom_line(alpha=0.5) + ggtitle(paste(Estuary,'@', Riv.Gauge.loc, " - Linear and smooth trend in river flow (GAUGE) lin trend was ", round(RivT.lintrend,3), ' C°/year with p=', round(RivT.pvalNCV_ECall,10), sep=" ")) + theme(plot.title=element_text(face="bold", size=9)) + geom_smooth(method='lm',fill="green", formula=y~x, colour="darkgreen", size = 0.5) + stat_smooth(method=gam, formula=y~s(x, k=ggplotGAM.k), se=T, size=0.5) + ylab(expression(paste("River Flow [ML/day]", sep=""))) + xlab("Time") } #Sea temp p2sst <- ggplot(combined.df, aes(y=SSTmean, x=index(combined.TS))) + geom_line(alpha=0.5) + ggtitle(paste(Estuary,"NNRP(NARCLIM reanalysis) - Linear and smooth trend in sea surface temperature (NNRP) lin trend was ", round(SST.lintrend,3), ' C°/year with p=', round(SST.pvalNCV_ECall,10), sep=" ")) + theme(plot.title=element_text(face="bold", size=9)) + geom_smooth(method='lm',fill="green", formula=y~x, colour="darkgreen", size = 0.5) + stat_smooth(method=gam, formula=y~s(x, k=ggplotGAM.k), se=T, size=0.5) + ylab("Sea Surface Temperature [C°]") + xlab("Time") #sst temp p2Est <- ggplot(combined.df, aes(y=EstTmean, x=index(combined.TS))) + geom_line(alpha=0.5) + ggtitle(paste(Estuary,'@', Est.Gauge.loc, " - Linear and smooth trend in Estuary temperature (GAUGE) lin trend was ", round(EstT.lintrend,3), ' C°/year with p=', round(EstT.pvalNCV_ECall,10), sep=" ")) + theme(plot.title=element_text(face="bold", size=9)) + geom_smooth(method='lm',fill="green", formula=y~x, colour="darkgreen", size = 0.5) + #stat_smooth(method=gam, formula=y~s(x, k=ggplotGAM.k), se=T, size=0.5) + ylab("Estuary Temperature [C°]") + xlab("Time") #export to png png.name <- paste(Output.Directory, Estuary, '@', Riv.Gauge.loc, '_Trends_tasmean_1990-present_', Sys.Date(),".png", sep="") png(file = png.name, width = 10.5, height = 7, units='in', res=500) grid.arrange(p2air,ncol=1) dev.off() png.name <- paste(Output.Directory, Estuary, '@', Riv.Gauge.loc, '_Trends_rivTmean_1990-present_', Sys.Date(),".png", sep="") png(file = png.name, width = 10.5, height = 7, units='in', res=500) grid.arrange(p2riv,ncol=1) dev.off() png.name <- paste(Output.Directory, Estuary, '@', Riv.Gauge.loc, '_Trends_rivQmean_1990-present_', Sys.Date(),".png", sep="") png(file = png.name, width = 10.5, height = 7, units='in', res=500) grid.arrange(p2rivQ,ncol=1) dev.off() png.name <- paste(Output.Directory, Estuary, '@', Riv.Gauge.loc, '_Trends_SSTmean_1990-present_', Sys.Date(),".png", sep="") png(file = png.name, width = 10.5, height = 7, units='in', res=500) grid.arrange(p2sst,ncol=1) dev.off() #export an overview plot as png gA <- ggplotGrob(p2air) gB <- ggplotGrob(p2riv) gC <- ggplotGrob(p2sst) gD <- ggplotGrob(p2Est) gE <- ggplotGrob(p2rivQ) gA$widths <- gE$widths gC$widths <- gE$widths gD$widths <- gE$widths gB$widths <- gE$widths png.name <- paste(Output.Directory, Estuary, '@', Riv.Gauge.loc, '_Trends_SST_RivT_AirT_1990-present_', Sys.Date(),".png", sep="") png(file = png.name, width = 10.5, height = 7, units='in', res=500) grid.arrange(gA,gB ,gC,ncol=1) dev.off() png.name <- paste(Output.Directory, Estuary, '@', Riv.Gauge.loc, '_Trends_SST_RivT_EstT_1990-present_', Sys.Date(),".png", sep="") png(file = png.name, width = 10.5, height = 7, units='in', res=500) grid.arrange(gB,gD,gC,ncol=1) dev.off() png.name <- paste(Output.Directory, Estuary, '@', Riv.Gauge.loc, '_Trends_RivQ_RivT_EstT_1990-present_', Sys.Date(),".png", sep="") png(file = png.name, width = 10.5, height = 7, units='in', res=500) grid.arrange(gE,gB,gD,ncol=1) dev.off() png.name <- paste(Output.Directory, Estuary, '@', Riv.Gauge.loc, '_Trends_AirT_RivT_RivQ_1990-present_', Sys.Date(),".png", sep="") png(file = png.name, width = 10.5, height = 7, units='in', res=500) grid.arrange(gA,gB,gE,ncol=1) dev.off() png.name <- paste(Output.Directory, Estuary, '@', Riv.Gauge.loc, '_Trends_AirT_RivT_1990-present_', Sys.Date(),".png", sep="") png(file = png.name, width = 10.5, height = 7, units='in', res=500) grid.arrange(gA,gB,ncol=1) dev.off() png.name <- paste(Output.Directory, Estuary, '@', Riv.Gauge.loc, '_Trends_RivT_RivQ_1990-present_', Sys.Date(),".png", sep="") png(file = png.name, width = 10.5, height = 7, units='in', res=500) grid.arrange(gB,gE,ncol=1) dev.off()