From 8d1d056ee1ccb05ef3b736d9520efd6a27e9d0c0 Mon Sep 17 00:00:00 2001 From: unknown <olivier.delaigue@ANPI1430.antony.irstea.priv> Date: Fri, 7 Apr 2017 11:31:31 +0200 Subject: [PATCH] v1.0.6.16 bug fixed in plot.OutputsModel when there is no common data to plot the cumulative frequency or the correlation QQ --- DESCRIPTION | 4 +- R/plot.OutputsModel.R | 111 ++++++++++++++++++++++++------------------ 2 files changed, 65 insertions(+), 50 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index bb5a0380..9d084f71 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.0.6.15 -Date: 2017-04-05 +Version: 1.0.6.16 +Date: 2017-04-07 Authors@R: c( person("Laurent", "Coron", role = c("aut", "trl")), person("Charles", "Perrin", role = c("aut", "ths")), diff --git a/R/plot.OutputsModel.R b/R/plot.OutputsModel.R index a8c01206..d664ec41 100644 --- a/R/plot.OutputsModel.R +++ b/R/plot.OutputsModel.R @@ -430,41 +430,49 @@ plot.OutputsModel <- function(x, Qobs = NULL, IndPeriod_Plot = NULL, BasinArea = 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; + if ( BOOL_Qobs & !BOOL_Qsim) { SelectNotZero <- SelectQobsNotZero; ylim <- range(log(Qobs[IndPeriod_Plot][SelectNotZero]), na.rm = TRUE); } - if (BOOL_Qsim & !BOOL_Qobs) { SelectNotZero <- SelectQsimNotZero; + 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; + if ( BOOL_Qobs & BOOL_Qsim) { SelectNotZero <- SelectQobsNotZero & SelectQsimNotZero; ylim <- range(log(c(Qobs[IndPeriod_Plot][SelectNotZero], OutputsModel$Qsim[IndPeriod_Plot][SelectNotZero])), na.rm = TRUE); } - plot(0, 0, type = "n", - xlim = xlim, ylim = ylim, - xaxt = "n", yaxt = "n", - xlab = "", ylab = "", main = "", ...); - ### abline(h = 0, lty = 2, col = grey(0.5)); - ### abline(h = 1, lty = 2, col = grey(0.5)); - 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; - 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")); } - 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"); } - if (!is.null(BasinArea)) { - Factor <- Factor_UNIT_M3S; - axis(side = 4, at = seqDATA1, labels = round(seqDATA2*Factor), cex.axis = cex.axis, ...) - par(las = 0); mtext(side = 4, paste0("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) + 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); + 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 + 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")) + } + 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") + } + if (!is.null(BasinArea)) { + Factor <- Factor_UNIT_M3S; + axis(side = 4, at = seqDATA1, labels = round(seqDATA2*Factor), cex.axis = cex.axis, ...) + par(las = 0); mtext(side = 4, paste0("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); + text(0, 0, labels = "NO COMMON DATA", col = "grey40") + } box() } @@ -473,24 +481,31 @@ plot.OutputsModel <- function(x, Qobs = NULL, IndPeriod_Plot = NULL, BasinArea = if (BOOLPLOT_CorQQ) { kPlot <- kPlot+1; mar <- c(6, 5, 1, 5); par(new = FALSE, mar = mar, las = 0) - ylim <- log(range(c(Qobs[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero], OutputsModel$Qsim[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero]), na.rm = TRUE)); - plot(log(Qobs[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero]), - 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); - if (!is.null(BasinArea)) { - Factor <- Factor_UNIT_M3S; - axis(side = 4, at = seqDATA1, labels = round(seqDATA2*Factor), cex.axis = cex.axis, ...); - par(las = 0); mtext(side = 4, paste0("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) + if (any(SelectNotZero)) { + ylim <- log(range(c(Qobs[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero], OutputsModel$Qsim[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero]), na.rm = TRUE)) + plot(log(Qobs[IndPeriod_Plot][SelectQobsNotZero & SelectQsimNotZero]), + 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); + if (!is.null(BasinArea)) { + Factor <- Factor_UNIT_M3S; + axis(side = 4, at = seqDATA1, labels = round(seqDATA2*Factor), cex.axis = cex.axis, ...); + par(las = 0); mtext(side = 4, paste0("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); + text(0, 0, labels = "NO COMMON DATA", col = "grey40") + } box() } - + ##Empty_plots while (kPlot < iPlotMax) { kPlot <- kPlot+1; -- GitLab