R/mgsplot.qq.R

Defines functions mgsplot.qq

Documented in mgsplot.qq

#' create QQ plots
#' 
#' @param dfIN is a dataframe and can be ["X","Y","facet_var"] or ["X","Y"]
#' @param dfIN[,1]: Observed (X axis)
#' @param dfIN[,2]: Modeled (Y axis)
#' @param dfIN[,3]: facet_variable (optional)
#' Note: original dataframe column names are used in final plot.
#' 
#' @return ggplot object
#'
#' @import ggplot2
#' 
#' @export mgsplot.qq
#########################################################################

mgsplot.qq <- function(dfIN,sfile){
  
  titles <- colnames(dfIN)
  
  dftmp <- dfIN
  
    bins <- unique(dfIN[,3])
    ln <- length(bins)
    # nc is the number of columns in the output facet wrapped figure
    if (ln < 3){
      nc <- ln
    }else{
      nc <- ceiling(ln/3)
    }
  
  dftmp[,"Observed"] <- dfIN[,1]
  dftmp[,"Modeled"] <- dfIN[,2]
  if(ln == 1){
    dftmp[,"f"] <- bins[1]
  } else{
    dftmp[,"f"] <- dfIN[,3]
  }
  dftmp <- dftmp[,c("Observed","Modeled","f")]
  
  df.list <- list()
  tmp <- data.frame(matrix(ncol=3,nrow = length(dftmp[,"Observed"])))
  for(i in 1:ln){
    tmp <- dftmp[which(dftmp[,"f"] == bins[i]),]
    tmp[,"Observed"] <- sort(tmp[,"Observed"],decreasing=TRUE)
    tmp[,"Modeled"] <- sort(tmp[,"Modeled"],decreasing=TRUE)
    df.list[[i]] <- tmp
    rm(tmp)
  }

  df <- do.call("rbind", df.list)

  p <- ggplot(df,aes(x=Observed,y=Modeled)) + 
    geom_abline(intercept = 0, slope = 1, linetype = 1, size = 1.0,colour = "blue")+
    geom_abline(intercept = 0, slope = 0.5, linetype = 2, size = 1.0,colour = "blue")+
    geom_abline(intercept = 0, slope = 2, linetype = 2, size = 1.0,colour = "blue")+
    geom_point(size=2,fill="grey",colour="black",pch=21, size=5,alpha = I(0.2))+
    theme_bw(base_size = 12, base_family = "Helvetica")+
    xlab(titles[1])+
    ylab(titles[2])+
    coord_equal()+
    facet_wrap(~f,ncol = nc)+
    theme(aspect.ratio = 1)
  
  return(p)
}
michellegrace/mgs.dispersion documentation built on May 22, 2019, 9:55 p.m.