#' 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)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.