R/setpar.R

Defines functions setpar

Documented in setpar

# Do this in a separate file to see the generated help:
#library(devtools)
#document()
#load_all(as.package("../../onlineforecast"))
#?aslt

#' Setting \code{\link{par}()} plotting parameters to a set of default values
#'
#' A simple function, which sets the \code{\link{par}()} plotting parameters to a default set of values.
#'
#' Actually, only really used for setting useful \code{par} values for multiple time series plots with same x-axis.
#' Give \code{tmpl="ts"} and \code{mfrow=c(x,1)}, where x is the number of plots.
#' 
#' @title Setting \code{\link{par}()} plotting parameters
#' @param tmpl The name of the parameter template, give "ts" as default
#' @param mfrow The mfrow for \code{par}.
#' @param ... More parameters for \code{par}.
#' @return Return the original set of parameters, such that they can be reset after plotting.
#' @examples
#'
#' # Make some data
#' D <- data.frame(t=seq(ct("2020-01-01"),ct("2020-01-10"),len=100), x=rnorm(100), y=runif(100))
#' # Remember the currect par values
#' oldpar <- setpar()
#'
#' # Generate two stacked plots with same x-axis
#' setpar("ts", mfrow=c(2,1))
#' plot(D$t, D$x, type="l")
#' plot(D$t, D$y, type="l")
#' # Note xaxt="s" must be set
#' axis.POSIXct(1, D$t, xaxt="s", format="%Y-%m-%d")
#'
#' # Set back the par to the previous
#' par(oldpar)
#' 
#' # In a function, where this is used and a plot is generated,
#' # then do like this in order to automatically reset on exit
#' oldpar <- setpar(mfrow=c(2,1))
#' on.exit(par(oldpar))        
#'
#' @importFrom graphics par
#' @export
setpar <- function(tmpl = "ts", mfrow = c(1,1), ...) {
    # Get par list
    p <- par(no.readonly = TRUE)
    # Templates
    if (tmpl == "ts") {
        par(mfrow = mfrow, oma = c(3, 0, 2, 0), mar = c(0, 4, 1, 0), xaxt = "n", 
            mgp = c(2.2, 0.4, 0), tcl = -0.4, ...)
    }else if (tmpl == "pdf") {
        par(mar = c(4, 4, 1, 1), mgp = c(2.2, 0.7, 0), tcl = -0.4, ...)
    }else{
        stop("Must give tmpl like 'ts' or 'pdf'")
    }
    
    # Replace all the parameters given in prm Get only the ... parameters
    i <- which(!nams(match.call()) %in% nams(match.call(expand.dots = TRUE)))
    if (length(i) > 0) {
        par(...)
        # prm <- as.list(match.call()[i]) p <- list() for(i in 1:length(prm)) { p$new <-
        # eval(prm[[i]]) nams(p)[i] <- nams(prm)[i] } par(p)
    }
    # Only done to remove NOTE in "R CMD check", that R6 package is not used
    if(FALSE){ R6::R6Class("temp", public = list(x=1)) }
    # Set par and return the original par options(warn = (-1)) options(warn = 1)
    invisible(p)
}

Try the onlineforecast package in your browser

Any scripts or data that you put into this service are public.

onlineforecast documentation built on Oct. 12, 2023, 5:15 p.m.