From 2d46dc4c06e0b60542c0f6a817b82d351f92abcd Mon Sep 17 00:00:00 2001 From: Delaigue Olivier <olivier.delaigue@irstea.priv> Date: Wed, 13 Mar 2019 08:59:16 +0100 Subject: [PATCH] v1.2.9.3 CLEAN: syntax revision of plot.OutputsModel --- DESCRIPTION | 4 +- NEWS.rmd | 2 +- R/plot.OutputsModel.R | 780 ++++++++++++++++++++++++++++-------------- 3 files changed, 521 insertions(+), 265 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index d11f7cc7..b3128316 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,8 +1,8 @@ Package: airGR Type: Package Title: Suite of GR Hydrological Models for Precipitation-Runoff Modelling -Version: 1.2.9.2 -Date: 2019-03-12 +Version: 1.2.9.3 +Date: 2019-03-13 Authors@R: c( person("Laurent", "Coron", role = c("aut", "trl"), comment = c(ORCID = "0000-0002-1503-6204")), person("Charles", "Perrin", role = c("aut", "ths"), comment = c(ORCID = "0000-0001-8552-1881")), diff --git a/NEWS.rmd b/NEWS.rmd index 7f7cf29c..b4148939 100644 --- a/NEWS.rmd +++ b/NEWS.rmd @@ -13,7 +13,7 @@ output: -### 1.2.9.2 Release Notes (2019-03-12) +### 1.2.9.3 Release Notes (2019-03-13) diff --git a/R/plot.OutputsModel.R b/R/plot.OutputsModel.R index 3b6fedf9..a750eed8 100644 --- a/R/plot.OutputsModel.R +++ b/R/plot.OutputsModel.R @@ -2,83 +2,158 @@ plot.OutputsModel <- function(x, Qobs = NULL, IndPeriod_Plot = NULL, BasinArea = cex.axis = 1, cex.lab = 0.9, cex.leg = 0.9, lwd = 1, verbose = TRUE, ...) { OutputsModel <- x - + if (!inherits(OutputsModel, "GR") & !inherits(OutputsModel, "CemaNeige")) { - stop(paste("OutputsModel not in the correct format for default plotting", sep = "")) + stop("'OutputsModel' not in the correct format for default plotting") } - BOOL_Dates <- FALSE; - if ("DatesR" %in% names(OutputsModel)) { BOOL_Dates <- TRUE; } - BOOL_Pobs <- FALSE; - if ("Precip" %in% names(OutputsModel)) { BOOL_Pobs <- TRUE; } - BOOL_Qsim <- FALSE; - if ("Qsim" %in% names(OutputsModel)) { BOOL_Qsim <- TRUE; } - BOOL_Qobs <- FALSE; - if (BOOL_Qsim & length(Qobs) == length(OutputsModel$Qsim)) { - if (sum(is.na(Qobs)) != length(Qobs)) { - BOOL_Qobs <- TRUE - } - } else if (inherits(OutputsModel, "GR")) { - warning("Incorrect length of Qobs. Time series of observed flow not drawn.") - } - BOOL_Snow <- FALSE; - if ("CemaNeigeLayers" %in% names(OutputsModel)) { if ("SnowPack" %in% names(OutputsModel$CemaNeigeLayers[[1]])) { BOOL_Snow <- TRUE; } } - BOOL_Psol <- FALSE; - if ("CemaNeigeLayers" %in% names(OutputsModel)) { if ("Psol" %in% names(OutputsModel$CemaNeigeLayers[[1]])) { BOOL_Psol <- TRUE; } } - - - if ( is.null( which)) { stop("which must be a vector of character") } - if (!is.vector( which)) { stop("which must be a vector of character") } - if (!is.character(which)) { stop("which must be a vector of character") } + BOOL_Dates <- FALSE + + if ("DatesR" %in% names(OutputsModel)) { + BOOL_Dates <- TRUE + } + BOOL_Pobs <- FALSE + + if ("Precip" %in% names(OutputsModel)) { + BOOL_Pobs <- TRUE + } + BOOL_Qsim <- FALSE + + if ("Qsim" %in% names(OutputsModel)) { + BOOL_Qsim <- TRUE + } + BOOL_Qobs <- FALSE + if (BOOL_Qsim & length(Qobs) == length(OutputsModel$Qsim)) { + if (sum(is.na(Qobs)) != length(Qobs)) { + BOOL_Qobs <- TRUE + } + } else if (inherits(OutputsModel, "GR")) { + warning("Incorrect length of 'Qobs'. Time series of observed flow not drawn") + } + BOOL_Snow <- FALSE + + if ("CemaNeigeLayers" %in% names(OutputsModel)) { + if ("SnowPack" %in% names(OutputsModel$CemaNeigeLayers[[1]])) { + BOOL_Snow <- TRUE + } + } + BOOL_Psol <- FALSE + if ("CemaNeigeLayers" %in% names(OutputsModel)) { + if ("Psol" %in% names(OutputsModel$CemaNeigeLayers[[1]])) { + BOOL_Psol <- TRUE + } + } + + if (is.null(which)) { + stop("'which' must be a vector of character") + } + if (!is.vector(which)) { + stop("'which' must be a vector of character") + } + if (!is.character(which)) { + stop("'which' must be a vector of character") + } if (any(!which %in% c("all", "Precip", 'Temp', "SnowPack", "Flows", "Regime", "CumFreq", "CorQQ"))) { - stop("Incorrect element found in argument which:\nit can only contain 'all', 'Precip', 'Temp', 'SnowPack', 'Flows', 'Regime', 'CumFreq' or 'CorQQ'") + stop("Incorrect element found in argument 'which':\nit can only contain 'all', 'Precip', 'Temp', 'SnowPack', 'Flows', 'Regime', 'CumFreq' or 'CorQQ'") } if (all(which %in% c("Temp", "SnowPack")) & !inherits(OutputsModel, "CemaNeige")) { - stop("Incorrect element found in argument which:\nwithout CemaNeige it can only contain 'all', 'Precip', 'Flows', 'Regime', 'CumFreq' or 'CorQQ'") + stop("Incorrect element found in argument 'which':\nwithout CemaNeige it can only contain 'all', 'Precip', 'Flows', 'Regime', 'CumFreq' or 'CorQQ'") } if (length(unique(which %in% c("Temp", "SnowPack"))) == 2 & !inherits(OutputsModel, "CemaNeige")) { - warning("Incorrect element found in argument which:\nit can only contain 'all', 'Precip', 'Flows', 'Regime', 'CumFreq' or 'CorQQ'\nwithout CemaNeige 'Temp' and 'SnowPack' are not available") + warning("Incorrect element found in argument 'which':\nit can only contain 'all', 'Precip', 'Flows', 'Regime', 'CumFreq' or 'CorQQ'\nwithout CemaNeige 'Temp' and 'SnowPack' are not available") } if ("all" %in% which) { which <- c("Precip", "Temp", "SnowPack", "Flows", "Regime", "CumFreq", "CorQQ") } - - + + if (!BOOL_Dates) { - stop(paste("OutputsModel must contain at least DatesR to allow plotting", sep = "")) } + stop("'OutputsModel' must contain at least 'DatesR' to allow plotting") + } if (inherits(OutputsModel, "GR") & !BOOL_Qsim) { - stop(paste("OutputsModel must contain at least Qsim to allow plotting", sep = "")) } - + stop("'OutputsModel' must contain at least 'Qsim' to allow plotting") + } + if (BOOL_Dates) { MyRollMean1 <- function(x, n) { - return(filter(x, rep(1/n, n), sides = 2)); } + return(filter(x, rep(1 / n, n), sides = 2)) + } MyRollMean2 <- function(x, n) { - return(filter(c(tail(x, n%/%2), x, x[1:(n%/%2)]), rep(1/n, n), sides = 2)[(n%/%2+1):(length(x)+n%/%2)]); } + return(filter(c(tail(x, n %/% 2), x, x[1:(n %/% 2)]), rep(1 / n, n), sides = 2)[(n %/% 2 + 1):(length(x) + n %/% 2)]) + } MyRollMean3 <- function(x, n) { - return(filter(x, filter = rep(1/n, n), sides = 2, circular = TRUE)) + return(filter(x, filter = rep(1 / n, n), sides = 2, circular = TRUE)) } - BOOL_TS <- FALSE; - TimeStep <- difftime(tail(OutputsModel$DatesR, 1), tail(OutputsModel$DatesR, 2), units = "secs")[[1]]; - if (inherits(OutputsModel, "hourly" ) & TimeStep %in% ( 60*60)) { BOOL_TS <- TRUE; NameTS <- "hour" ; plotunit <- "[mm/h]"; formatAxis <- "%m/%Y"; } - if (inherits(OutputsModel, "daily" ) & TimeStep %in% ( 24*60*60)) { BOOL_TS <- TRUE; NameTS <- "day" ; plotunit <- "[mm/d]"; formatAxis <- "%m/%Y"; } - if (inherits(OutputsModel, "monthly") & TimeStep %in% (c(28, 29, 30, 31)*24*60*60)) { BOOL_TS <- TRUE; NameTS <- "month"; plotunit <- "[mm/month]"; formatAxis <- "%m/%Y"; } - if (inherits(OutputsModel, "yearly" ) & TimeStep %in% ( c(365, 366)*24*60*60)) { BOOL_TS <- TRUE; NameTS <- "year" ; plotunit <- "[mm/y]"; formatAxis <- "%Y" ; } - if (!BOOL_TS) { stop(paste("the time step of the model inputs could not be found", sep = "")) } - } - if (length(IndPeriod_Plot) == 0) { IndPeriod_Plot <- 1:length(OutputsModel$DatesR); } - if (inherits(OutputsModel, "CemaNeige")) { NLayers <- length(OutputsModel$CemaNeigeLayers); } - PsolLayerMean <- NULL; if (BOOL_Psol) { - for(iLayer in 1:NLayers) { - if (iLayer == 1) { PsolLayerMean <- OutputsModel$CemaNeigeLayers[[iLayer]]$Psol/NLayers; - } else { PsolLayerMean <- PsolLayerMean + OutputsModel$CemaNeigeLayers[[iLayer]]$Psol/NLayers; } } } - BOOL_QobsZero <- FALSE; if (BOOL_Qobs) { SelectQobsNotZero <- (round(Qobs[IndPeriod_Plot] , 4) != 0); BOOL_QobsZero <- sum(!SelectQobsNotZero, na.rm = TRUE)>0; } - BOOL_QsimZero <- FALSE; if (BOOL_Qsim) { SelectQsimNotZero <- (round(OutputsModel$Qsim[IndPeriod_Plot], 4) != 0); BOOL_QsimZero <- sum(!SelectQsimNotZero, na.rm = TRUE)>0; } - if (BOOL_QobsZero & verbose) { warning("\t zeroes detected in Qobs: some plots in the log space will not be created using all time-steps"); } - if (BOOL_QsimZero & verbose) { warning("\t zeroes detected in Qsim: some plots in the log space will not be created using all time-steps"); } - BOOL_FilterZero <- TRUE; - + BOOL_TS <- FALSE + TimeStep <- difftime(tail(OutputsModel$DatesR, 1), tail(OutputsModel$DatesR, 2), units = "secs")[[1]] + if (inherits(OutputsModel, "hourly") & + TimeStep %in% (60 * 60)) { + BOOL_TS <- TRUE + NameTS <- "hour" + plotunit <- "[mm/h]" + formatAxis <- "%m/%Y" + } + if (inherits(OutputsModel, "daily") & + TimeStep %in% (24 * 60 * 60)) { + BOOL_TS <- TRUE + NameTS <- "day" + plotunit <- "[mm/d]" + formatAxis <- "%m/%Y" + } + if (inherits(OutputsModel, "monthly") & + TimeStep %in% (c(28, 29, 30, 31) * 24 * 60 * 60)) { + BOOL_TS <- TRUE + NameTS <- "month" + plotunit <- "[mm/month]" + formatAxis <- "%m/%Y" + } + if (inherits(OutputsModel, "yearly") & + TimeStep %in% (c(365, 366) * 24 * 60 * 60)) { + BOOL_TS <- TRUE + NameTS <- "year" + plotunit <- "[mm/y]" + formatAxis <- "%Y" + } + if (!BOOL_TS) { + stop("the time step of the model inputs could not be found") + } + } + if (length(IndPeriod_Plot) == 0) { + IndPeriod_Plot <- 1:length(OutputsModel$DatesR) + } + if (inherits(OutputsModel, "CemaNeige")) { + NLayers <- length(OutputsModel$CemaNeigeLayers) + } + PsolLayerMean <- NULL + if (BOOL_Psol) { + for (iLayer in 1:NLayers) { + if (iLayer == 1) { + PsolLayerMean <- OutputsModel$CemaNeigeLayers[[iLayer]]$Psol / NLayers + } else { + PsolLayerMean <- PsolLayerMean + OutputsModel$CemaNeigeLayers[[iLayer]]$Psol / NLayers + } + } + } + BOOL_QobsZero <- FALSE + if (BOOL_Qobs) { + SelectQobsNotZero <- (round(Qobs[IndPeriod_Plot] , 4) != 0) + BOOL_QobsZero <- sum(!SelectQobsNotZero, na.rm = TRUE) > 0 + } + BOOL_QsimZero <- FALSE + if (BOOL_Qsim) { + SelectQsimNotZero <- (round(OutputsModel$Qsim[IndPeriod_Plot], 4) != 0) + BOOL_QsimZero <- sum(!SelectQsimNotZero, na.rm = TRUE) > 0 + } + if (BOOL_QobsZero & verbose) { + warning( "\t zeroes detected in 'Qobs': some plots in the log space will not be created using all time-steps") + } + if (BOOL_QsimZero & verbose) { + warning( "\t zeroes detected in 'Qsim': some plots in the log space will not be created using all time-steps") + } + BOOL_FilterZero <- TRUE + ## Plots_choices BOOLPLOT_Precip <- ( "Precip" %in% which & BOOL_Pobs ) BOOLPLOT_Temp <- ( "Temp" %in% which & BOOL_Snow ) @@ -87,67 +162,83 @@ plot.OutputsModel <- function(x, Qobs = NULL, IndPeriod_Plot = NULL, BasinArea = BOOLPLOT_Regime <- ( "Regime" %in% which & BOOL_TS & BOOL_Qsim & (NameTS %in% c("hour", "day", "month")) ) BOOLPLOT_CumFreq <- ( "CumFreq" %in% which & (BOOL_Qsim | BOOL_Qobs) & BOOL_FilterZero ) BOOLPLOT_CorQQ <- ( "CorQQ" %in% which & (BOOL_Qsim & BOOL_Qobs) & BOOL_FilterZero ) - - + + ## Options BLOC <- TRUE if (BLOC) { lwdk <- 1.8 line <- 2.6 bg <- NA - - matlayout <- NULL; iPlot <- 0; + + matlayout <- NULL + iPlot <- 0 + Sum1 <- sum(c(BOOLPLOT_Precip, BOOLPLOT_SnowPack, BOOLPLOT_Flows)) Sum2 <- sum(c(BOOLPLOT_Regime, BOOLPLOT_CumFreq, BOOLPLOT_CorQQ)) - if (BOOLPLOT_Precip) { - matlayout <- rbind(matlayout, c(iPlot+1, iPlot+1, iPlot+1)); iPlot <- iPlot+1; } - if (BOOLPLOT_Temp) { - matlayout <- rbind(matlayout, c(iPlot+1, iPlot+1, iPlot+1), c(iPlot+1, iPlot+1, iPlot+1)); iPlot <- iPlot+1; } - if (BOOLPLOT_SnowPack) { - matlayout <- rbind(matlayout, c(iPlot+1, iPlot+1, iPlot+1), c(iPlot+1, iPlot+1, iPlot+1)); iPlot <- iPlot+1; } - if (BOOLPLOT_Flows) { - matlayout <- rbind(matlayout, c(iPlot+1, iPlot+1, iPlot+1), c(iPlot+1, iPlot+1, iPlot+1)); iPlot <- iPlot+1; } - if ((Sum1 >= 1 & Sum2 != 0) | (Sum1 == 0 & Sum2 == 3)) { - matlayout <- rbind(matlayout, c(iPlot+1, iPlot+2, iPlot+3), c(iPlot+1, iPlot+2, iPlot+3)); iPlot <- iPlot+3; } - if (Sum1 == 0 & Sum2 == 2) { - matlayout <- rbind(matlayout, c(iPlot+1, iPlot+2)); iPlot <- iPlot+2; } - if (Sum1 == 0 & Sum2 == 1) { - matlayout <- rbind(matlayout, iPlot+1); iPlot <- iPlot+1; } - iPlotMax <- iPlot; - + if (BOOLPLOT_Precip) { + matlayout <- rbind(matlayout, c(iPlot+1, iPlot+1, iPlot+1)) + iPlot <- iPlot + 1 + } + if (BOOLPLOT_Temp) { + matlayout <- rbind(matlayout, c(iPlot+1, iPlot+1, iPlot+1), c(iPlot+1, iPlot+1, iPlot+1)) + iPlot <- iPlot+1 + } + if (BOOLPLOT_SnowPack) { + matlayout <- rbind(matlayout, c(iPlot + 1, iPlot + 1, iPlot + 1), c(iPlot + 1, iPlot + 1, iPlot + 1)) + iPlot <- iPlot + 1 + } + if (BOOLPLOT_Flows) { + matlayout <- rbind(matlayout, c(iPlot + 1, iPlot + 1, iPlot + 1), c(iPlot + 1, iPlot + 1, iPlot + 1)) + iPlot <- iPlot + 1 + } + if ((Sum1 >= 1 & Sum2 != 0) | (Sum1 == 0 & Sum2 == 3)) { + matlayout <- rbind(matlayout, c(iPlot + 1, iPlot + 2, iPlot + 3), c(iPlot + 1, iPlot + 2, iPlot + 3)) + iPlot <- iPlot + 3 + } + if (Sum1 == 0 & Sum2 == 2) { + matlayout <- rbind(matlayout, c(iPlot + 1, iPlot + 2)) + iPlot <- iPlot + 2 + } + if (Sum1 == 0 & Sum2 == 1) { + matlayout <- rbind(matlayout, iPlot + 1) + iPlot <- iPlot + 1 + } + iPlotMax <- iPlot + # isRStudio <- Sys.getenv("RSTUDIO") == "1"; - # if (!isRStudio) { - # if (Sum1 == 1 & Sum2 == 0) { width = 10; height = 05; } - # if (Sum1 == 1 & Sum2 != 0) { width = 10; height = 07; } - # if (Sum1 == 2 & Sum2 == 0) { width = 10; height = 05; } - # if (Sum1 == 2 & Sum2 != 0) { width = 10; height = 07; } - # if (Sum1 == 3 & Sum2 == 0) { width = 10; height = 07; } - # if (Sum1 == 3 & Sum2 != 0) { width = 10; height = 10; } - # if (Sum1 == 0 & Sum2 == 1) { width = 05; height = 05; } - # if (Sum1 == 0 & Sum2 == 2) { width = 10; height = 04; } - # if (Sum1 == 0 & Sum2 == 3) { width = 10; height = 03; } + # if (!isRStudio) { + # if (Sum1 == 1 & Sum2 == 0) {width = 10; height = 05;} + # if (Sum1 == 1 & Sum2 != 0) {width = 10; height = 07;} + # if (Sum1 == 2 & Sum2 == 0) {width = 10; height = 05;} + # if (Sum1 == 2 & Sum2 != 0) {width = 10; height = 07;} + # if (Sum1 == 3 & Sum2 == 0) {width = 10; height = 07;} + # if (Sum1 == 3 & Sum2 != 0) {width = 10; height = 10;} + # if (Sum1 == 0 & Sum2 == 1) {width = 05; height = 05;} + # if (Sum1 == 0 & Sum2 == 2) {width = 10; height = 04;} + # if (Sum1 == 0 & Sum2 == 3) {width = 10; height = 03;} # dev.new(width = width, height = height) - # } + #} opar <- par(no.readonly = TRUE) on.exit(par(opar)) layout(matlayout) - - Xaxis <- 1:length(IndPeriod_Plot); + + Xaxis <- 1:length(IndPeriod_Plot) if (BOOL_Dates) { if (NameTS %in% c("hour", "day", "month")) { - Seq1 <- which(OutputsModel$DatesR[IndPeriod_Plot]$mday == 1 & OutputsModel$DatesR[IndPeriod_Plot]$mon %in% c(0, 3, 6, 9)) - Seq2 <- which(OutputsModel$DatesR[IndPeriod_Plot]$mday == 1 & OutputsModel$DatesR[IndPeriod_Plot]$mon == 0) - Labels2 <- format(OutputsModel$DatesR[IndPeriod_Plot], format = formatAxis)[Seq2] + Seq1 <- which(OutputsModel$DatesR[IndPeriod_Plot]$mday == 1 & OutputsModel$DatesR[IndPeriod_Plot]$mon %in% c(0, 3, 6, 9)) + Seq2 <- which(OutputsModel$DatesR[IndPeriod_Plot]$mday == 1 & OutputsModel$DatesR[IndPeriod_Plot]$mon == 0) + Labels2 <- format(OutputsModel$DatesR[IndPeriod_Plot], format = formatAxis)[Seq2] } if (NameTS %in% c("year")) { - Seq1 <- 1:length(OutputsModel$DatesR[IndPeriod_Plot]) - Seq2 <- 1:length(OutputsModel$DatesR[IndPeriod_Plot]) - Labels2 <- format(OutputsModel$DatesR[IndPeriod_Plot], format = formatAxis)[Seq2] + Seq1 <- 1:length(OutputsModel$DatesR[IndPeriod_Plot]) + Seq2 <- 1:length(OutputsModel$DatesR[IndPeriod_Plot]) + Labels2 <- format(OutputsModel$DatesR[IndPeriod_Plot], format = formatAxis)[Seq2] } } - + if (!is.null(BasinArea)) { Factor_MMH_M3S <- 60 * 60 Factor_MMD_M3S <- 60 * 60 * 24 @@ -160,7 +251,7 @@ plot.OutputsModel <- function(x, Qobs = NULL, IndPeriod_Plot = NULL, BasinArea = Factor_UNIT_M3S <- BasinArea / (Factor_UNIT_M3S / 1000) } } - + kPlot <- 0 ## vector of Q values for the y-axis when it is expressed in @@ -172,7 +263,7 @@ plot.OutputsModel <- function(x, Qobs = NULL, IndPeriod_Plot = NULL, BasinArea = seqDATA1ba <- log(seqDATA0 * Factor_UNIT_M3S) seqDATA2ba <- round(exp(seqDATA1ba), digits = 2) } - + ## Precip if (BOOLPLOT_Precip) { kPlot <- kPlot + 1 @@ -193,7 +284,7 @@ plot.OutputsModel <- function(x, Qobs = NULL, IndPeriod_Plot = NULL, BasinArea = xlab = "", ylab = "", ...) axis(side = 2, at = pretty(ylim1), labels = pretty(ylim1), cex.axis = cex.axis, ...) par(las = 0) - mtext(side = 2, paste0("precip. ", plotunit), cex = cex.lab, adj = 1, line = line) + mtext(side = 2, paste("precip.", plotunit), cex = cex.lab, adj = 1, line = line) par(las = 0) if (BOOL_Psol) { @@ -217,116 +308,180 @@ plot.OutputsModel <- function(x, Qobs = NULL, IndPeriod_Plot = NULL, BasinArea = ## Temp if (BOOLPLOT_Temp) { - kPlot <- kPlot+1; mar <- c(3, 5, 1, 5); + kPlot <- kPlot + 1 + mar <- c(3, 5, 1, 5) par(new = FALSE, mar = mar, las = 0) ylim1 <- c(+99999, -99999) for(iLayer in 1:NLayers) { - ylim1[1] <- min(ylim1[1], OutputsModel$CemaNeigeLayers[[iLayer]]$Temp); - ylim1[2] <- max(ylim1[2], OutputsModel$CemaNeigeLayers[[iLayer]]$Temp); - if (iLayer == 1) { SnowPackLayerMean <- OutputsModel$CemaNeigeLayers[[iLayer]]$Temp/NLayers; - } else { SnowPackLayerMean <- SnowPackLayerMean + OutputsModel$CemaNeigeLayers[[iLayer]]$Temp/NLayers; } + ylim1[1] <- min(ylim1[1], OutputsModel$CemaNeigeLayers[[iLayer]]$Temp) + ylim1[2] <- max(ylim1[2], OutputsModel$CemaNeigeLayers[[iLayer]]$Temp) + if (iLayer == 1) { + SnowPackLayerMean <- OutputsModel$CemaNeigeLayers[[iLayer]]$Temp/NLayers + } else { + SnowPackLayerMean <- SnowPackLayerMean + OutputsModel$CemaNeigeLayers[[iLayer]]$Temp/NLayers + } } plot(SnowPackLayerMean[IndPeriod_Plot], type = "n", ylim = ylim1, xlab = "", ylab = "", xaxt = "n", yaxt = "n", ...) - for(iLayer in 1:NLayers) { lines(OutputsModel$CemaNeigeLayers[[iLayer]]$Temp[IndPeriod_Plot], lty = 3, col = "orchid", lwd = lwd * lwdk * 0.8); } + for(iLayer in 1:NLayers) { + lines(OutputsModel$CemaNeigeLayers[[iLayer]]$Temp[IndPeriod_Plot], lty = 3, col = "orchid", lwd = lwd * lwdk * 0.8) + } abline(h = 0, col = "grey", lty = 2) lines(SnowPackLayerMean[IndPeriod_Plot], type = "l", lwd = lwd * lwdk *1.0, col = "darkorchid4") axis(side = 2, at = pretty(ylim1), labels = pretty(ylim1), cex.axis = cex.axis, ...) - par(las = 0); mtext(side = 2, expression(paste("temp. [", degree, "C]", sep = "")), padj = 0.2, line = line, cex = cex.lab); par(las = 0); - legend("topright", legend = c("mean", "layers"), col = c("darkorchid4", "orchid"), lty = c(1, 3), lwd = c(lwd*1.0, lwd*0.8), bty = "o", bg = bg, box.col = bg, cex = cex.leg) + par(las = 0) + mtext(side = 2, expression(paste0("temp. [", degree, "C]")), padj = 0.2, line = line, cex = cex.lab) + par(las = 0) + legend("topright", legend = c("mean", "layers"), col = c("darkorchid4", "orchid"), + lty = c(1, 3), lwd = c(lwd*1.0, lwd*0.8), + bty = "o", bg = bg, box.col = bg, cex = cex.leg) box() if (BOOL_Dates) { - axis(side = 1, at = Seq1, labels = FALSE, cex.axis = cex.axis, ...); - axis(side = 1, at = Seq2, labels = Labels2, lwd.ticks = 1.5, cex.axis = cex.axis, ...); - } else { axis(side = 1, at = pretty(Xaxis), labels = pretty(Xaxis), cex.axis = cex.axis, ...); } + axis(side = 1, at = Seq1, labels = FALSE, cex.axis = cex.axis, ...) + axis(side = 1, at = Seq2, labels = Labels2, lwd.ticks = 1.5, cex.axis = cex.axis, ...) + } else { + axis(side = 1, at = pretty(Xaxis), labels = pretty(Xaxis), cex.axis = cex.axis, ...) + } } - + ## SnowPack if (BOOLPLOT_SnowPack) { - kPlot <- kPlot+1; mar <- c(3, 5, 1, 5); + kPlot <- kPlot + 1 + mar <- c(3, 5, 1, 5) par(new = FALSE, mar = mar, las = 0) ylim1 <- c(+99999, -99999) for(iLayer in 1:NLayers) { - ylim1[1] <- min(ylim1[1], OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack); - ylim1[2] <- max(ylim1[2], OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack); - if (iLayer == 1) { SnowPackLayerMean <- OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack/NLayers; - } else { SnowPackLayerMean <- SnowPackLayerMean + OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack/NLayers; } + ylim1[1] <- min(ylim1[1], OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack) + ylim1[2] <- max(ylim1[2], OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack) + if (iLayer == 1) { + SnowPackLayerMean <- OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack/NLayers + } else { + SnowPackLayerMean <- SnowPackLayerMean + OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack/NLayers + } } plot(SnowPackLayerMean[IndPeriod_Plot], type = "l", ylim = ylim1, lwd = lwd * lwdk *1.2, col = "royalblue", xlab = "", ylab = "", xaxt = "n", yaxt = "n", ...) - for(iLayer in 1:NLayers) { lines(OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack[IndPeriod_Plot], lty = 3, col = "royalblue", lwd = lwd * lwdk *0.8); } + for(iLayer in 1:NLayers) { + lines(OutputsModel$CemaNeigeLayers[[iLayer]]$SnowPack[IndPeriod_Plot], lty = 3, col = "royalblue", lwd = lwd * lwdk *0.8) + } axis(side = 2, at = pretty(ylim1), labels = pretty(ylim1), cex.axis = cex.axis, ...) - par(las = 0); mtext(side = 2, paste0("snow pack ", "[mm]"), line = line, cex = cex.lab); par(las = 0); - legend("topright", legend = c("mean", "layers"), col = c("royalblue", "royalblue"), lty = c(1, 3), lwd = c(lwd*1.2, lwd*0.8), bty = "o", bg = bg, box.col = bg, cex = cex.leg) + par(las = 0) + mtext(side = 2, paste("snow pack", "[mm]"), line = line, cex = cex.lab) + par(las = 0) + legend("topright", legend = c("mean", "layers"), col = c("royalblue", "royalblue"), + lty = c(1, 3), lwd = c(lwd*1.2, lwd*0.8), + bty = "o", bg = bg, box.col = bg, cex = cex.leg) box() if (BOOL_Dates) { - axis(side = 1, at = Seq1, labels = FALSE, cex.axis = cex.axis, ...); - axis(side = 1, at = Seq2, labels = Labels2, lwd.ticks = 1.5, cex.axis = cex.axis, ...); - } else { axis(side = 1, at = pretty(Xaxis), labels = pretty(Xaxis), cex.axis = cex.axis, ...); } + axis(side = 1, at = Seq1, labels = FALSE, cex.axis = cex.axis, ...) + axis(side = 1, at = Seq2, labels = Labels2, lwd.ticks = 1.5, cex.axis = cex.axis, ...) + } else { + axis(side = 1, at = pretty(Xaxis), labels = pretty(Xaxis), cex.axis = cex.axis, ...) + } } - - + + ## Flows if (BOOLPLOT_Flows & log_scale) { - kPlot <- kPlot+1; mar <- c(3, 5, 1, 5); + kPlot <- kPlot + 1 + mar <- c(3, 5, 1, 5) par(new = FALSE, mar = mar, las = 0) - + DATA2 <- Qobs DATA2[!SelectQobsNotZero] <- mean(Qobs, na.rm = TRUE) / 10000 DATA2 <- log(DATA2) - + DATA3 <- OutputsModel$Qsim DATA3[!SelectQsimNotZero] <- mean(OutputsModel$Qsim, na.rm = TRUE) / 10000 DATA3 <- log(DATA3) - - ylim1 <- range(DATA3[IndPeriod_Plot], na.rm = TRUE); - if (BOOL_Qobs) { ylim1 <- range(c(ylim1, DATA2[IndPeriod_Plot]), na.rm = TRUE); } - ylim2 <- c(ylim1[1], 1.2*ylim1[2]); - plot(Xaxis, rep(NA, length(Xaxis)), type = "n", ylim = ylim2, xlab = "", ylab = "", xaxt = "n", yaxt = "n", ...); - txtleg <- NULL; colleg <- NULL; - if (BOOL_Qobs) { lines(Xaxis, DATA2[IndPeriod_Plot], lwd = lwd * lwdk , lty = 1, col = par("fg")); txtleg <- c(txtleg, "observed"); colleg <- c(colleg, par("fg")); } - if (BOOL_Qsim) { lines(Xaxis, DATA3[IndPeriod_Plot], lwd = lwd * lwdk , lty = 1, col = "orangered"); txtleg <- c(txtleg, "simulated"); colleg <- c(colleg, "orangered"); } + + ylim1 <- range(DATA3[IndPeriod_Plot], na.rm = TRUE) + if (BOOL_Qobs) { + ylim1 <- range(c(ylim1, DATA2[IndPeriod_Plot]), na.rm = TRUE) + } + ylim2 <- c(ylim1[1], 1.2*ylim1[2]) + plot(Xaxis, rep(NA, length(Xaxis)), type = "n", ylim = ylim2, xlab = "", ylab = "", xaxt = "n", yaxt = "n", ...) + txtleg <- NULL + colleg <- NULL + if (BOOL_Qobs) { + lines(Xaxis, DATA2[IndPeriod_Plot], lwd = lwd * lwdk , lty = 1, col = par("fg")) + txtleg <- c(txtleg, "observed") + colleg <- c(colleg, par("fg")) + } + if (BOOL_Qsim) { + lines(Xaxis, DATA3[IndPeriod_Plot], lwd = lwd * lwdk , lty = 1, col = "orangered") + txtleg <- c(txtleg, "simulated") + colleg <- c(colleg, "orangered") + } axis(side = 2, at = seqDATA1, labels = seqDATA2, cex.axis = cex.axis, ...) - par(las = 0); mtext(side = 2, paste0("flow ", plotunit), line = line, cex = cex.lab); par(las = 0); + par(las = 0) + mtext(side = 2, paste("flow", plotunit), line = line, cex = cex.lab) + par(las = 0) if (!is.null(BasinArea)) { - Factor <- Factor_UNIT_M3S; + Factor <- Factor_UNIT_M3S axis(side = 4, at = seqDATA1ba, labels = seqDATA2ba, cex.axis = cex.axis, ...) - par(las = 0); mtext(side = 4, paste0("flow ", "[m3/s]"), line = line, cex = cex.lab); par(las = 0); } + par(las = 0) + mtext(side = 4, paste("flow", "[m3/s]"), line = line, cex = cex.lab) + par(las = 0) + } if (BOOL_Dates) { - axis(side = 1, at = Seq1, labels = FALSE, cex.axis = cex.axis, ...); - axis(side = 1, at = Seq2, labels = Labels2, lwd.ticks = 1.5, cex.axis = cex.axis, ...); - } else { axis(side = 1, at = pretty(Xaxis), labels = pretty(Xaxis), cex.axis = cex.axis, ...); } + axis(side = 1, at = Seq1, labels = FALSE, cex.axis = cex.axis, ...) + axis(side = 1, at = Seq2, labels = Labels2, lwd.ticks = 1.5, cex.axis = cex.axis, ...) + } else { + axis(side = 1, at = pretty(Xaxis), labels = pretty(Xaxis), cex.axis = cex.axis, ...) + } legend("topright", txtleg, col = colleg, lty = 1, lwd = lwd * lwdk , bty = "o", bg = bg, box.col = bg, cex = cex.leg) legend("bottomright", "log scale", lty = 1, col = NA, bty = "o", bg = bg, box.col = bg, cex = cex.leg) box() } if (BOOLPLOT_Flows & !log_scale) { - kPlot <- kPlot+1; mar <- c(3, 5, 1, 5); + kPlot <- kPlot + 1 + mar <- c(3, 5, 1, 5) par(new = FALSE, mar = mar, las = 0) - ylim1 <- range(OutputsModel$Qsim[IndPeriod_Plot], na.rm = TRUE); - if (BOOL_Qobs) { ylim1 <- range(c(ylim1, Qobs[IndPeriod_Plot]), na.rm = TRUE); } - ylim2 <- c(ylim1[1], 1.2*ylim1[2]); - plot(Xaxis, rep(NA, length(Xaxis)), type = "n", ylim = ylim2, xlab = "", ylab = "", xaxt = "n", yaxt = "n", ...); - txtleg <- NULL; colleg <- NULL; - if (BOOL_Qobs) { lines(Xaxis, Qobs[IndPeriod_Plot], lwd = lwd * lwdk , lty = 1, col = par("fg")); txtleg <- c(txtleg, "observed"); colleg <- c(colleg, par("fg")); } - if (BOOL_Qsim) { lines(Xaxis, OutputsModel$Qsim[IndPeriod_Plot], lwd = lwd * lwdk , lty = 1, col = "orangered"); txtleg <- c(txtleg, "simulated"); colleg <- c(colleg, "orangered"); } + ylim1 <- range(OutputsModel$Qsim[IndPeriod_Plot], na.rm = TRUE) + if (BOOL_Qobs) { + ylim1 <- range(c(ylim1, Qobs[IndPeriod_Plot]), na.rm = TRUE) + } + ylim2 <- c(ylim1[1], 1.2*ylim1[2]) + plot(Xaxis, rep(NA, length(Xaxis)), type = "n", ylim = ylim2, xlab = "", ylab = "", xaxt = "n", yaxt = "n", ...) + txtleg <- NULL + colleg <- NULL + if (BOOL_Qobs) { + lines(Xaxis, Qobs[IndPeriod_Plot], lwd = lwd * lwdk , lty = 1, col = par("fg")) + txtleg <- c(txtleg, "observed") + colleg <- c(colleg, par("fg")) + } + if (BOOL_Qsim) { + lines(Xaxis, OutputsModel$Qsim[IndPeriod_Plot], lwd = lwd * lwdk , lty = 1, col = "orangered") + txtleg <- c(txtleg, "simulated") + colleg <- c(colleg, "orangered") + } axis(side = 2, at = pretty(ylim1), labels = pretty(ylim1), cex.axis = cex.axis, ...) - par(las = 0); mtext(side = 2, paste("flow", plotunit, sep = " "), line = line, cex = cex.lab); par(las = 0); + par(las = 0) + mtext(side = 2, paste("flow", plotunit), line = line, cex = cex.lab) + par(las = 0) if (!is.null(BasinArea)) { - Factor <- Factor_UNIT_M3S; - axis(side = 4, at = pretty(ylim1*Factor)/Factor, labels = pretty(ylim1*Factor), cex.axis = cex.axis, ...); - par(las = 0); mtext(side = 4, paste("flow", "[m3/s]", sep = " "), line = line, cex = cex.lab); par(las = 0); } + Factor <- Factor_UNIT_M3S + axis(side = 4, at = pretty(ylim1*Factor)/Factor, labels = pretty(ylim1*Factor), cex.axis = cex.axis, ...) + par(las = 0) + mtext(side = 4, paste("flow", "[m3/s]"), line = line, cex = cex.lab) + par(las = 0) + } if (BOOL_Dates) { - axis(side = 1, at = Seq1, labels = FALSE, cex.axis = cex.axis, ...); - axis(side = 1, at = Seq2, labels = Labels2, lwd.ticks = 1.5, cex.axis = cex.axis, ...); - } else { axis(side = 1, at = pretty(Xaxis), labels = pretty(Xaxis), cex.axis = cex.axis, ...); } + axis(side = 1, at = Seq1, labels = FALSE, cex.axis = cex.axis, ...) + axis(side = 1, at = Seq2, labels = Labels2, lwd.ticks = 1.5, cex.axis = cex.axis, ...) + } else { + axis(side = 1, at = pretty(Xaxis), labels = pretty(Xaxis), cex.axis = cex.axis, ...) + } legend("topright", txtleg, col = colleg, lty = 1, lwd = lwd * lwdk , bty = "o", bg = bg, box.col = bg, cex = cex.leg) box() } - - + + ## Regime if (BOOLPLOT_Regime) { - kPlot <- kPlot+1; mar <- c(6, 5, 1, 5); plotunitregime <- "[mm/month]" + kPlot <- kPlot + 1 + mar <- c(6, 5, 1, 5) + plotunitregime <- "[mm/month]" par(new = FALSE, mar = mar, las = 0) ## Empty plot if ((NameTS == "hour" & length(IndPeriod_Plot) < 697) | @@ -334,175 +489,266 @@ plot.OutputsModel <- function(x, Qobs = NULL, IndPeriod_Plot = NULL, BasinArea = (NameTS == "month" & length(IndPeriod_Plot) < 2) | (NameTS == "year" & length(IndPeriod_Plot) < 2)) { plot(0, 0, type = "n", xaxt = "n", yaxt = "n", xlab = "", ylab = "", main = "", ...) - par(las = 0); mtext(side = 1, text = "", line = line, cex = cex.lab); par(las = 0) - text(0, 0, labels = "NO ENOUGH VALUES", col = "grey40"); par(las = 0) + par(las = 0) + mtext(side = 1, text = "", line = line, cex = cex.lab) + par(las = 0) + text(0, 0, labels = "NO ENOUGH VALUES", col = "grey40") + par(las = 0) txtlab <- "flow regime" if (BOOL_Pobs) { txtlab <- "precip. & flow regime" } - par(las = 0); mtext(side = 2, paste(txtlab, plotunitregime), line = line, cex = cex.lab); par(las = 0) + par(las = 0) + mtext(side = 2, paste(txtlab, plotunitregime), line = line, cex = cex.lab) + par(las = 0) } else { ## Data_formating_as_table - DataModel <- as.data.frame(matrix(as.numeric(NA), nrow = length(IndPeriod_Plot), ncol = 5)); - DataModel[, 1] <- as.numeric(format(OutputsModel$DatesR[IndPeriod_Plot], format = "%Y%m%d%H")); - if (BOOL_Pobs) { DataModel[, 2] <- OutputsModel$Precip[IndPeriod_Plot]; } - if (BOOL_Psol) { DataModel[, 3] <- PsolLayerMean[IndPeriod_Plot]; } - if (BOOL_Qobs) { DataModel[, 4] <- Qobs[IndPeriod_Plot]; } - if (BOOL_Qsim) { DataModel[, 5] <- OutputsModel$Qsim[IndPeriod_Plot]; } - colnames(DataModel) <- c("Dates", "Precip", "Psol", "Qobs", "Qsim"); - TxtDatesDataModel <- formatC(DataModel$Dates, format = "d", width = 8, flag = "0"); + DataModel <- as.data.frame(matrix(as.numeric(NA), nrow = length(IndPeriod_Plot), ncol = 5)) + DataModel[, 1] <- as.numeric(format(OutputsModel$DatesR[IndPeriod_Plot], format = "%Y%m%d%H")) + if (BOOL_Pobs) { + DataModel[, 2] <- OutputsModel$Precip[IndPeriod_Plot] + } + if (BOOL_Psol) { + DataModel[, 3] <- PsolLayerMean[IndPeriod_Plot] + } + if (BOOL_Qobs) { + DataModel[, 4] <- Qobs[IndPeriod_Plot] + } + if (BOOL_Qsim) { + DataModel[, 5] <- OutputsModel$Qsim[IndPeriod_Plot] + } + colnames(DataModel) <- c("Dates", "Precip", "Psol", "Qobs", "Qsim") + TxtDatesDataModel <- formatC(DataModel$Dates, format = "d", width = 8, flag = "0") ## Building_of_daily_time_series_if_needed - if (NameTS == "month") { DataDaily <- NULL; } - if (NameTS == "day" ) { DataDaily <- DataModel; } - if (NameTS == "hour" ) { DataDaily <- as.data.frame(aggregate(DataModel[, 2:5], by = list(as.numeric(substr(TxtDatesDataModel, 1, 8))), FUN = sum, na.rm = T)); } + if (NameTS == "month") { + DataDaily <- NULL + } + if (NameTS == "day") { + DataDaily <- DataModel + } + if (NameTS == "hour" ) { + DataDaily <- as.data.frame(aggregate(DataModel[, 2:5], by = list(as.numeric(substr(TxtDatesDataModel, 1, 8))), FUN = sum, na.rm = TRUE)) + } if (NameTS %in% c("hour", "day")) { - colnames(DataDaily) <- c("Dates", "Precip", "Psol", "Qobs", "Qsim"); - TxtDatesDataDaily <- formatC(DataDaily$Dates, format = "d", width = 8, flag = "0"); } + colnames(DataDaily) <- c("Dates", "Precip", "Psol", "Qobs", "Qsim") + TxtDatesDataDaily <- formatC(DataDaily$Dates, format = "d", width = 8, flag = "0") + } ## Building_of_monthly_time_series_if_needed - if (NameTS == "month") { DataMonthly <- DataModel; } - if (NameTS == "day" ) { DataMonthly <- as.data.frame(aggregate(DataDaily[, 2:5], by = list(as.numeric(substr(TxtDatesDataDaily, 1, 6))), FUN = sum, na.rm = T)); } - if (NameTS == "hour" ) { DataMonthly <- as.data.frame(aggregate(DataDaily[, 2:5], by = list(as.numeric(substr(TxtDatesDataDaily, 1, 6))), FUN = sum, na.rm = T)); } - colnames(DataMonthly) <- c("Dates", "Precip", "Psol", "Qobs", "Qsim"); - TxtDatesDataMonthly <- formatC(DataMonthly$Dates, format = "d", width = 6, flag = "0"); + if (NameTS == "month") { + DataMonthly <- DataModel + } + if (NameTS == "day" ) { + DataMonthly <- as.data.frame(aggregate(DataDaily[, 2:5], by = list(as.numeric(substr(TxtDatesDataDaily, 1, 6))), FUN = sum, na.rm = TRUE)) + } + if (NameTS == "hour" ) { + DataMonthly <- as.data.frame(aggregate(DataDaily[, 2:5], by = list(as.numeric(substr(TxtDatesDataDaily, 1, 6))), FUN = sum, na.rm = TRUE)) + } + colnames(DataMonthly) <- c("Dates", "Precip", "Psol", "Qobs", "Qsim") + TxtDatesDataMonthly <- formatC(DataMonthly$Dates, format = "d", width = 6, flag = "0") ## Computation_of_interannual_mean_series if (!is.null(DataDaily)) { SeqY <- data.frame(Dates = as.numeric(format(seq(as.Date("1970-01-01", tz = "UTC"), as.Date("1970-12-31", tz = "UTC"), "day"), format = "%m%d"))) - DataDailyInterAn <- as.data.frame(aggregate(DataDaily[, 2:5], by = list(as.numeric(substr(TxtDatesDataDaily , 5, 8))), FUN = mean, na.rm = T)); + DataDailyInterAn <- as.data.frame(aggregate(DataDaily[, 2:5], by = list(as.numeric(substr(TxtDatesDataDaily , 5, 8))), FUN = mean, na.rm = TRUE)) colnames(DataDailyInterAn) <- c("Dates", "Precip", "Psol", "Qobs", "Qsim") DataDailyInterAn <- merge(SeqY, DataDailyInterAn, by = "Dates", all.x = TRUE, all.y = FALSE) } if (!is.null(DataMonthly)) { SeqM <- data.frame(Dates = 1:12) - DataMonthlyInterAn <- as.data.frame(aggregate(DataMonthly[, 2:5], by = list(as.numeric(substr(TxtDatesDataMonthly, 5, 6))), FUN = mean, na.rm = T)); + DataMonthlyInterAn <- as.data.frame(aggregate(DataMonthly[, 2:5], by = list(as.numeric(substr(TxtDatesDataMonthly, 5, 6))), FUN = mean, na.rm = TRUE)) colnames(DataMonthlyInterAn) <- c("Dates", "Precip", "Psol", "Qobs", "Qsim") DataMonthlyInterAn <- merge(SeqM, DataMonthlyInterAn, by = "Dates", all.x = TRUE, all.y = FALSE) } ## Smoothing_of_daily_series_and_scale_conversion_to_make_them_become_a_monthly_regime if (!is.null(DataDaily)) { ## Smoothing - NDaysWindow <- 30; + NDaysWindow <- 30 DataDailyInterAn <- as.data.frame(cbind(DataDailyInterAn$Dates, MyRollMean3(DataDailyInterAn$Precip, NDaysWindow), MyRollMean3(DataDailyInterAn$Psol, NDaysWindow), - MyRollMean3(DataDailyInterAn$Qobs , NDaysWindow), MyRollMean3(DataDailyInterAn$Qsim, NDaysWindow))); - colnames(DataDailyInterAn) <- c("Dates", "Precip", "Psol", "Qobs", "Qsim"); + MyRollMean3(DataDailyInterAn$Qobs , NDaysWindow), MyRollMean3(DataDailyInterAn$Qsim, NDaysWindow))) + colnames(DataDailyInterAn) <- c("Dates", "Precip", "Psol", "Qobs", "Qsim") ## Scale_conversion_to_make_them_become_a_monthly_regime - if (plotunitregime != "[mm/month]") { stop(paste("incorrect unit for regime plot", sep = "")) } - DataDailyInterAn <- as.data.frame(cbind(DataDailyInterAn[1], DataDailyInterAn[2:5]*30)); + if (plotunitregime != "[mm/month]") { + stop("incorrect unit for regime plot") + } + DataDailyInterAn <- as.data.frame(cbind(DataDailyInterAn[1], DataDailyInterAn[2:5]*30)) } ## Plot_preparation - DataPlotP <- DataMonthlyInterAn; + DataPlotP <- DataMonthlyInterAn if (!is.null(DataDaily)) { - DataPlotQ <- DataDailyInterAn; - SeqX1 <- c( 1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336, 366); - SeqX2 <- c( 15, 46, 75, 106, 136, 167, 197, 228, 259, 289, 320, 350); - labX <- "30-days rolling mean"; + DataPlotQ <- DataDailyInterAn + SeqX1 <- c( 1, 32, 61, 92, 122, 153, 183, 214, 245, 275, 306, 336, 366) + SeqX2 <- c( 15, 46, 75, 106, 136, 167, 197, 228, 259, 289, 320, 350) + labX <- "30-days rolling mean" } else { - DataPlotQ <- DataMonthlyInterAn; - SeqX1 <- seq(from = 0.5, to = 12.5, by = 1); - SeqX2 <- seq(from = 1 , to = 12 , by = 1); - labX <- ""; + DataPlotQ <- DataMonthlyInterAn + SeqX1 <- seq(from = 0.5, to = 12.5, by = 1) + SeqX2 <- seq(from = 1 , to = 12 , by = 1) + labX <- "" } - xLabels1 <- rep("", 13); + xLabels1 <- rep("", 13) xLabels2 <- month.abb - ylimQ <- range(c(DataPlotQ$Qobs, DataPlotQ$Qsim), na.rm = TRUE); - if (BOOL_Pobs) { ylimP <- c(max(DataPlotP$Precip, na.rm = TRUE), 0); } - txtleg <- NULL; colleg <- NULL; lwdleg <- NULL; lwdP = 10; + ylimQ <- range(c(DataPlotQ$Qobs, DataPlotQ$Qsim), na.rm = TRUE) + if (BOOL_Pobs) { + ylimP <- c(max(DataPlotP$Precip, na.rm = TRUE), 0) + } + txtleg <- NULL + colleg <- NULL + lwdleg <- NULL + lwdP = 10 ## Plot_forcings if (BOOL_Pobs) { plot(SeqX2[DataMonthlyInterAn$Dates], DataPlotP$Precip, type = "h", xlim = range(SeqX1), ylim = c(3*ylimP[1], ylimP[2]), lwd = lwdP, lend = 1, lty = 1, col = "royalblue", xlab = "", ylab = "", xaxt = "n", yaxt = "n", yaxs = "i", bty = "n", ...) - txtleg <- c(txtleg, "Ptot" ); colleg <- c(colleg, "royalblue"); lwdleg <- c(lwdleg, lwdP/3); - axis(side = 2, at = pretty(0.8*ylimP, n = 3), labels = pretty(0.8*ylimP, n = 3), col.axis = "royalblue", col.ticks = "royalblue", cex.axis = cex.axis, ...); - par(new = TRUE); } + txtleg <- c(txtleg, "Ptot" ) + colleg <- c(colleg, "royalblue") + lwdleg <- c(lwdleg, lwdP/3) + axis(side = 2, at = pretty(0.8*ylimP, n = 3), labels = pretty(0.8*ylimP, n = 3), col.axis = "royalblue", col.ticks = "royalblue", cex.axis = cex.axis, ...) + par(new = TRUE) + } if (BOOL_Psol) { plot(SeqX2, DataPlotP$Psol[DataMonthlyInterAn$Dates], type = "h", xlim = range(SeqX1), ylim = c(3*ylimP[1], ylimP[2]), lwd = lwdP, lend = 1, lty = 1, col = "lightblue", - xlab = "", ylab = "", xaxt = "n", yaxt = "n", yaxs = "i", bty = "n", ...); - txtleg <- c(txtleg, "Psol" ); colleg <- c(colleg, "lightblue"); lwdleg <- c(lwdleg, lwdP/3); - par(new = TRUE); } + xlab = "", ylab = "", xaxt = "n", yaxt = "n", yaxs = "i", bty = "n", ...) + txtleg <- c(txtleg, "Psol" ) + colleg <- c(colleg, "lightblue") + lwdleg <- c(lwdleg, lwdP/3) + par(new = TRUE) + } ## Plot_flows plot(NULL, type = "n", xlim = range(SeqX1), ylim = c(ylimQ[1], 2*ylimQ[2]), xlab = "", ylab = "", xaxt = "n", yaxt = "n", ...) - if (BOOL_Qobs) { lines(1:nrow(DataPlotQ), DataPlotQ$Qobs, lwd = lwd * lwdk , lty = 1, col = par("fg") ); txtleg <- c(txtleg, "Qobs" ); colleg <- c(colleg, par("fg") ); lwdleg <- c(lwdleg, lwd); } - if (BOOL_Qsim) { lines(1:nrow(DataPlotQ), DataPlotQ$Qsim, lwd = lwd * lwdk , lty = 1, col = "orangered"); txtleg <- c(txtleg, "Qsim"); colleg <- c(colleg, "orangered"); lwdleg <- c(lwdleg, lwd); } + if (BOOL_Qobs) { + lines(1:nrow(DataPlotQ), DataPlotQ$Qobs, lwd = lwd * lwdk , lty = 1, col = par("fg") ) + txtleg <- c(txtleg, "Qobs" ) + colleg <- c(colleg, par("fg") ) + lwdleg <- c(lwdleg, lwd) + } + if (BOOL_Qsim) { + lines(1:nrow(DataPlotQ), DataPlotQ$Qsim, lwd = lwd * lwdk , lty = 1, col = "orangered") + txtleg <- c(txtleg, "Qsim") + colleg <- c(colleg, "orangered") + lwdleg <- c(lwdleg, lwd) + } ## Axis_and_legend axis(side = 1, at = SeqX1, tick = TRUE , labels = xLabels1, cex.axis = cex.axis, ...) axis(side = 1, at = SeqX2, tick = FALSE, labels = xLabels2, cex.axis = cex.axis, ...) axis(side = 2, at = pretty(ylimQ), labels = pretty(ylimQ), cex.axis = cex.axis, ...) - par(las = 0); mtext(side = 1, labX, line = line, cex = cex.lab); par(las = 0); - posleg <- "topright"; txtlab <- "flow regime"; - if (BOOL_Pobs) { posleg <- "right"; txtlab <- "precip. & flow regime"; } - par(las = 0); mtext(side = 2, paste0(txtlab, " ", plotunitregime), line = line, cex = cex.lab); par(las = 0); + par(las = 0) + mtext(side = 1, labX, line = line, cex = cex.lab) + par(las = 0) + posleg <- "topright" + txtlab <- "flow regime" + if (BOOL_Pobs) { + posleg <- "right" + txtlab <- "precip. & flow regime" + } + par(las = 0) + mtext(side = 2, paste(txtlab, plotunitregime), line = line, cex = cex.lab) + par(las = 0) if (!is.null(BasinArea)) { Factor <- Factor_UNIT_M3S / (365.25 / 12) - axis(side = 4, at = pretty(ylimQ*Factor)/Factor, labels = pretty(ylimQ*Factor), cex.axis = cex.axis, ...); - par(las = 0); mtext(side = 4, paste0("flow regime ", "[m3/s]"), line = line, cex = cex.lab); par(las = 0); } - ### posleg <- "topright"; if (BOOL_Pobs) { posleg <- "right"; } + axis(side = 4, at = pretty(ylimQ*Factor)/Factor, labels = pretty(ylimQ*Factor), cex.axis = cex.axis, ...) + par(las = 0) + mtext(side = 4, paste("flow regime", "[m3/s]"), line = line, cex = cex.lab) + par(las = 0) + } + ### posleg <- "topright"; if (BOOL_Pobs) {posleg <- "right";} ### legend(posleg, txtleg, col = colleg, lty = 1, lwd = lwdleg, bty = "o", bg = bg, box.col = bg, cex = cex.leg) box() } } - - + + ## Cumulative_frequency if (BOOLPLOT_CumFreq) { - kPlot <- kPlot+1; mar <- c(6, 5, 1, 5); + kPlot <- kPlot + 1 + mar <- c(6, 5, 1, 5) par(new = FALSE, mar = mar, las = 0) - xlim <- c(0, 1); - if ( BOOL_Qobs & !BOOL_Qsim) { SelectNotZero <- SelectQobsNotZero; - ylim <- range(log(Qobs[IndPeriod_Plot][SelectNotZero]), na.rm = TRUE); } - if (!BOOL_Qobs & BOOL_Qsim) { SelectNotZero <- SelectQsimNotZero; - ylim <- range(log(OutputsModel$Qsim[IndPeriod_Plot][SelectNotZero]), na.rm = TRUE); } - if ( BOOL_Qobs & BOOL_Qsim) { SelectNotZero <- SelectQobsNotZero & SelectQsimNotZero; - ylim <- range(log(c(Qobs[IndPeriod_Plot][SelectNotZero], OutputsModel$Qsim[IndPeriod_Plot][SelectNotZero])), na.rm = TRUE); } + xlim <- c(0, 1) + if ( BOOL_Qobs & !BOOL_Qsim) { + SelectNotZero <- SelectQobsNotZero + ylim <- range(log(Qobs[IndPeriod_Plot][SelectNotZero]), na.rm = TRUE) + } + if (!BOOL_Qobs & BOOL_Qsim) { + SelectNotZero <- SelectQsimNotZero + ylim <- range(log(OutputsModel$Qsim[IndPeriod_Plot][SelectNotZero]), na.rm = TRUE) + } + if ( BOOL_Qobs & BOOL_Qsim) { + SelectNotZero <- SelectQobsNotZero & SelectQsimNotZero + ylim <- range(log(c(Qobs[IndPeriod_Plot][SelectNotZero], OutputsModel$Qsim[IndPeriod_Plot][SelectNotZero])), na.rm = TRUE) + } SelectNotZero <- ifelse(is.na(SelectNotZero), FALSE, SelectNotZero) if (any(SelectNotZero)) { plot(0, 0, type = "n", xlim = xlim, ylim = ylim, xaxt = "n", yaxt = "n", - xlab = "", ylab = "", main = "", ...); - axis(side = 1, at = pretty(xlim), labels = pretty(xlim), cex.axis = cex.axis, ...); - par(las = 0); mtext(side = 1, text = "non-exceedance prob. [-]", line = line, cex = cex.lab); par(las = 0); + xlab = "", ylab = "", main = "", ...) + axis(side = 1, at = pretty(xlim), labels = pretty(xlim), cex.axis = cex.axis, ...) + par(las = 0) + mtext(side = 1, text = "non-exceedance prob. [-]", line = line, cex = cex.lab) + par(las = 0) axis(side = 2, at = seqDATA1, labels = seqDATA2, cex.axis = cex.axis, ...) - par(las = 0); mtext(side = 2, text = paste("flow ", plotunit, "", sep = ""), line = line, cex = cex.lab); par(las = 0); - txtleg <- NULL; colleg <- NULL + par(las = 0) + mtext(side = 2, text = paste("flow", plotunit), line = line, cex = cex.lab) + par(las = 0) + txtleg <- NULL + colleg <- NULL if (BOOL_Qobs) { - DATA2 <- log(Qobs[IndPeriod_Plot][SelectNotZero]); - SeqQuant <- seq(0, 1, by = 1/(length(DATA2))); Quant <- as.numeric(quantile(DATA2, SeqQuant, na.rm = TRUE)); - Fn <- ecdf(DATA2); YY <- DATA2; YY <- YY[order( Fn(DATA2) )]; XX <- Fn(DATA2); XX <- XX[order( Fn(DATA2) )]; - lines(XX, YY, lwd = lwd, col = par("fg")); - txtleg <- c(txtleg, "observed"); colleg <- c(colleg, par("fg")) + DATA2 <- log(Qobs[IndPeriod_Plot][SelectNotZero]) + SeqQuant <- seq(0, 1, by = 1/(length(DATA2))) + Quant <- as.numeric(quantile(DATA2, SeqQuant, na.rm = TRUE)) + Fn <- ecdf(DATA2) + YY <- DATA2 + YY <- YY[order( Fn(DATA2) )] + XX <- Fn(DATA2) + XX <- XX[order( Fn(DATA2) )] + lines(XX, YY, lwd = lwd, col = par("fg")) + txtleg <- c(txtleg, "observed") + colleg <- c(colleg, par("fg")) } if (BOOL_Qsim) { - DATA2 <- log(OutputsModel$Qsim[IndPeriod_Plot][SelectNotZero]); - SeqQuant <- seq(0, 1, by = 1/(length(DATA2))); Quant <- as.numeric(quantile(DATA2, SeqQuant, na.rm = TRUE)); - Fn <- ecdf(DATA2); YY <- DATA2; YY <- YY[order( Fn(DATA2) )]; XX <- Fn(DATA2); XX <- XX[order( Fn(DATA2) )]; - lines(XX, YY, lwd = lwd, col = "orangered"); - txtleg <- c(txtleg, "simulated"); colleg <- c(colleg, "orangered") + DATA2 <- log(OutputsModel$Qsim[IndPeriod_Plot][SelectNotZero]) + SeqQuant <- seq(0, 1, by = 1/(length(DATA2))) + Quant <- as.numeric(quantile(DATA2, SeqQuant, na.rm = TRUE)) + Fn <- ecdf(DATA2) + YY <- DATA2 + YY <- YY[order( Fn(DATA2) )] + XX <- Fn(DATA2) + XX <- XX[order( Fn(DATA2) )] + lines(XX, YY, lwd = lwd, col = "orangered") + txtleg <- c(txtleg, "simulated") + colleg <- c(colleg, "orangered") } if (!is.null(BasinArea)) { - Factor <- Factor_UNIT_M3S; + Factor <- Factor_UNIT_M3S axis(side = 4, at = seqDATA1, labels = round(seqDATA2*Factor, digits = 2), cex.axis = cex.axis, ...) - par(las = 0); mtext(side = 4, paste0("flow ", "[m3/s]"), line = line, cex = cex.lab); par(las = 0) + par(las = 0) + mtext(side = 4, paste("flow", "[m3/s]"), line = line, cex = cex.lab) + par(las = 0) } legend("topleft", txtleg, col = colleg, lty = 1, lwd = lwd, bty = "o", bg = bg, box.col = bg, cex = cex.leg) legend("bottomright", "log scale", lty = 1, col = NA, bty = "o", bg = bg, box.col = bg, cex = cex.leg) } else { - plot(0, 0, type = "n", xaxt = "n", yaxt = "n", xlab = "", ylab = "", main = "", ...); - par(las = 0); mtext(side = 1, text = "non-exceedance prob. [-]", line = line, cex = cex.lab); par(las = 0); - par(las = 0); mtext(side = 2, text = paste("flow ", plotunit, "", sep = ""), line = line, cex = cex.lab); par(las = 0); + plot(0, 0, type = "n", xaxt = "n", yaxt = "n", xlab = "", ylab = "", main = "", ...) + par(las = 0) + mtext(side = 1, text = "non-exceedance prob. [-]", line = line, cex = cex.lab) + par(las = 0) + par(las = 0) + mtext(side = 2, text = paste("flow", plotunit), line = line, cex = cex.lab) + par(las = 0) text(0, 0, labels = "NO COMMON DATA", col = "grey40") } box() } - - + + ## Correlation_QQ if (BOOLPLOT_CorQQ) { - kPlot <- kPlot+1; mar <- c(6, 5, 1, 5); + kPlot <- kPlot + 1 + mar <- c(6, 5, 1, 5) par(new = FALSE, mar = mar, las = 0) if (any(SelectNotZero)) { ylim <- log(range(c(Qobs[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero], OutputsModel$Qsim[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero]), na.rm = TRUE)) @@ -510,21 +756,31 @@ plot.OutputsModel <- function(x, Qobs = NULL, IndPeriod_Plot = NULL, BasinArea = log(OutputsModel$Qsim[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero]), type = "p", pch = 1, cex = 0.9, col = par("fg"), lwd = lwd, xlim = ylim, ylim = ylim, xaxt = "n", yaxt = "n", xlab = "", ylab = "", ...) - abline(a = 0, b = 1, col = "royalblue", lwd = lwd); - axis(side = 1, at = seqDATA1, labels = seqDATA2, cex = cex.leg, cex.axis = cex.axis, ...); - axis(side = 2, at = seqDATA1, labels = seqDATA2, cex = cex.leg, cex.axis = cex.axis, ...); - par(las = 0); mtext(side = 1, paste0("observed flow ", plotunit), line = line, cex = cex.lab); par(las = 0); - par(las = 0); mtext(side = 2, paste0("simulated flow ", plotunit), line = line, cex = cex.lab); par(las = 0); + abline(a = 0, b = 1, col = "royalblue", lwd = lwd) + axis(side = 1, at = seqDATA1, labels = seqDATA2, cex = cex.leg, cex.axis = cex.axis, ...) + axis(side = 2, at = seqDATA1, labels = seqDATA2, cex = cex.leg, cex.axis = cex.axis, ...) + par(las = 0) + mtext(side = 1, paste("observed flow", plotunit), line = line, cex = cex.lab) + par(las = 0) + par(las = 0) + mtext(side = 2, paste("simulated flow", plotunit), line = line, cex = cex.lab) + par(las = 0) if (!is.null(BasinArea)) { - Factor <- Factor_UNIT_M3S; - axis(side = 4, at = seqDATA1, labels = round(seqDATA2*Factor, digits = 2), cex.axis = cex.axis, ...); - par(las = 0); mtext(side = 4, paste0("simulated flow ", "[m3/s]"), line = line, cex = cex.lab); par(las = 0) + Factor <- Factor_UNIT_M3S + axis(side = 4, at = seqDATA1, labels = round(seqDATA2*Factor, digits = 2), cex.axis = cex.axis, ...) + par(las = 0) + mtext(side = 4, paste("simulated flow", "[m3/s]"), line = line, cex = cex.lab) + par(las = 0) } legend("bottomright", "log scale", lty = 1, col = NA, bty = "o", bg = bg, box.col = bg, cex = cex.leg) } else { plot(0, 0, type = "n", xaxt = "n", yaxt = "n", xlab = "", ylab = "", ...) - par(las = 0); mtext(side = 1, paste0("observed flow ", plotunit), line = line, cex = cex.lab); par(las = 0); - par(las = 0); mtext(side = 2, paste0("simulated flow ", plotunit), line = line, cex = cex.lab); par(las = 0); + par(las = 0) + mtext(side = 1, paste("observed flow", plotunit), line = line, cex = cex.lab) + par(las = 0) + par(las = 0) + mtext(side = 2, paste("simulated flow", plotunit), line = line, cex = cex.lab) + par(las = 0) text(0, 0, labels = "NO COMMON DATA", col = "grey40") } box() @@ -532,13 +788,13 @@ plot.OutputsModel <- function(x, Qobs = NULL, IndPeriod_Plot = NULL, BasinArea = ## Empty_plots while (kPlot < iPlotMax) { - kPlot <- kPlot+1; + kPlot <- kPlot + 1 par(new = FALSE) plot(0, 0, type = "n", xlab = "", ylab = "", axes = FALSE, ...) } - + ## Restoring_layout_options - layout(1); + layout(1) + - } -- GitLab