- "# Multiple plot function\n",
- "#\n",
- "# ggplot objects can be passed in ..., or to plotlist (as a list of ggplot objects)\n",
- "# - cols: Number of columns in layout\n",
- "# - layout: A matrix specifying the layout. If present, 'cols' is ignored.\n",
- "#\n",
- "# If the layout is something like matrix(c(1,2,3,3), nrow=2, byrow=TRUE),\n",
- "# then plot 1 will go in the upper left, 2 will go in the upper right, and\n",
- "# 3 will go all the way across the bottom.\n",
- "#\n",
- "multiplot <- function(..., plotlist=NULL, file, cols=1, layout=NULL) {\n",
- " library(grid)\n",
- "\n",
- " # Make a list from the ... arguments and plotlist\n",
- " plots <- c(list(...), plotlist)\n",
- "\n",
- " numPlots = length(plots)\n",
- "\n",
- " # If layout is NULL, then use 'cols' to determine layout\n",
- " if (is.null(layout)) {\n",
- " # Make the panel\n",
- " # ncol: Number of columns of plots\n",
- " # nrow: Number of rows needed, calculated from # of cols\n",
- " layout <- matrix(seq(1, cols * ceiling(numPlots/cols)),\n",
- " ncol = cols, nrow = ceiling(numPlots/cols))\n",
- " }\n",
- "\n",
- " if (numPlots==1) {\n",
- " print(plots[[1]])\n",
- "\n",
- " } else {\n",
- " # Set up the page\n",
- " grid.newpage()\n",
- " pushViewport(viewport(layout = grid.layout(nrow(layout), ncol(layout))))\n",
- "\n",
- " # Make each plot, in the correct location\n",
- " for (i in 1:numPlots) {\n",
- " # Get the i,j matrix positions of the regions that contain this subplot\n",
- " matchidx <- as.data.frame(which(layout == i, arr.ind = TRUE))\n",
- "\n",
- " print(plots[[i]], vp = viewport(layout.pos.row = matchidx$row,\n",
- " layout.pos.col = matchidx$col))\n",
- " }\n",
- " }\n",
- "}"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "hidden": true,
- "init_cell": true
- },
- "outputs": [],
- "source": [
- "# From https://sejohnston.com/2012/08/09/a-quick-and-easy-function-to-plot-lm-results-in-r/\n",
- "ggplotRegression <- function (fit) {\n",
- "\n",
- "require(ggplot2)\n",
- "\n",
- "ggplot(fit$model, aes_string(x = names(fit$model)[2], y = names(fit$model)[1])) + \n",
- " geom_point() +\n",
- " stat_smooth(method = \"lm\", col = \"red\") +\n",
- " labs(title = paste(\"Adj R2 = \",signif(summary(fit)$adj.r.squared, 5),\n",
- " \"Intercept =\",signif(fit$coef[[1]],5 ),\n",
- " \" Slope =\",signif(fit$coef[[2]], 5),\n",
- " \" P =\",signif(summary(fit)$coef[2,4], 5))) + \n",
- " theme(plot.title = element_text(size=12))\n",
- "}"