花花写于2020-2-28,这是我在R语言课堂上用的练习题,你可以看答案之前先自己做一下:
生成一个随机数(rnorm)组成的10行6列的矩阵,列名为sample1,sample2….sample6,行名为gene1,gene2…gene10,分组为sample1、2、3属于A组,sample4、5、6属于B组。用循环对每个基因画ggplot2箱线图,并尝试拼图。
方法一 循环+patchwork
这个是
exp = matrix(rnorm(60),nrow = 10)
colnames(exp) <- paste0("sample",1:6)
rownames(exp) <- paste0("gene",1:10)
exp[1:4,1:4]
#dat = cbind(t(exp),group = rep(c("A","B"),each = 3))
dat = data.frame(t(exp))
dat = mutate(dat,group = rep(c("A","B"),each = 3))
p = list()
library(ggplot2)
for(i in 1:(ncol(dat)-1)){
p[[i]] = ggplot(data = dat,aes_string(x = "group",y=colnames(dat)[i]))+
geom_boxplot(aes(color = group))+
geom_jitter(aes(color = group))+
theme_bw()
}
library(patchwork)
wrap_plots(p,nrow = 2,guides = "collect")
方法二
人见人爱tidyverse全家桶
gather+分面,需要优秀的ggplot2技巧
library(tidyr)
library(dplyr)
library(ggplot2)
exp = matrix(rnorm(60),nrow = 10)
colnames(exp) <- paste0("sample",1:6)
rownames(exp) <- paste0("gene",1:10)
exp[1:4,1:4]
dat = data.frame(t(exp))
dat = mutate(dat,group = rep(c("A","B"),each = 3))%>% mutate(pair = rep(c("AA","BB","cc"),each = 2))
dat2 = gather(dat,key = "gene",value = "expression",-group,-pair)
ggplot(data = dat2)+
geom_boxplot(aes(x = group,y = expression,color = group))+
theme_bw()+
facet_wrap(~gene,nrow = 2)