X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=plot_extensions.R;fp=plot_extensions.R;h=b72ddb011aa504f9bacea80995732a2d1a1ef9de;hb=42eadd5803ad1ca3804d800cd25dd72071c751eb;hp=0000000000000000000000000000000000000000;hpb=eb2e022359b221c7712502aa5802bb85c692c94f;p=ou-jupyter-r-demo.git diff --git a/plot_extensions.R b/plot_extensions.R new file mode 100644 index 0000000..b72ddb0 --- /dev/null +++ b/plot_extensions.R @@ -0,0 +1,60 @@ +# Multiple plot function +# +# ggplot objects can be passed in ..., or to plotlist (as a list of ggplot objects) +# - cols: Number of columns in layout +# - layout: A matrix specifying the layout. If present, 'cols' is ignored. +# +# If the layout is something like matrix(c(1,2,3,3), nrow=2, byrow=TRUE), +# then plot 1 will go in the upper left, 2 will go in the upper right, and +# 3 will go all the way across the bottom. +# +multiplot <- function(..., plotlist=NULL, file, cols=1, layout=NULL) { + library(grid) + + # Make a list from the ... arguments and plotlist + plots <- c(list(...), plotlist) + + numPlots = length(plots) + + # If layout is NULL, then use 'cols' to determine layout + if (is.null(layout)) { + # Make the panel + # ncol: Number of columns of plots + # nrow: Number of rows needed, calculated from # of cols + layout <- matrix(seq(1, cols * ceiling(numPlots/cols)), + ncol = cols, nrow = ceiling(numPlots/cols)) + } + + if (numPlots==1) { + print(plots[[1]]) + + } else { + # Set up the page + grid.newpage() + pushViewport(viewport(layout = grid.layout(nrow(layout), ncol(layout)))) + + # Make each plot, in the correct location + for (i in 1:numPlots) { + # Get the i,j matrix positions of the regions that contain this subplot + matchidx <- as.data.frame(which(layout == i, arr.ind = TRUE)) + + print(plots[[i]], vp = viewport(layout.pos.row = matchidx$row, + layout.pos.col = matchidx$col)) + } + } +} + +# From https://sejohnston.com/2012/08/09/a-quick-and-easy-function-to-plot-lm-results-in-r/ +ggplotRegression <- function (fit) { + +require(ggplot2) + +ggplot(fit$model, aes_string(x = names(fit$model)[2], y = names(fit$model)[1])) + + geom_point() + + stat_smooth(method = "lm", col = "red") + + labs(title = paste("Adj R2 = ",signif(summary(fit)$adj.r.squared, 5), + "Intercept =",signif(fit$coef[[1]],5 ), + " Slope =",signif(fit$coef[[2]], 5), + " P =",signif(summary(fit)$coef[2,4], 5))) + + theme(plot.title = element_text(size=12)) +}