美文网首页统计作图作图生信分析
R语言练习:基于两组基因差异,循环绘制箱线图组合

R语言练习:基于两组基因差异,循环绘制箱线图组合

作者: 小贝学生信 | 来源:发表于2020-03-02 23:37 被阅读0次

    这里分析小练习来自生信星球(一个很好的生信学习平台),有蛮多值得学习的知识点,一起来学习吧~

    • 假设数据:两组实验对象,各三个重复样本。进行转录组分析之类的之后,结果得到10个目标差异基因。
    • 目的:用箱线图表达每个基因在两组对象的差异水平。

    首先准备假设数据

    exp=matrix(rnorm(60),nrow=10)
    colnames(exp)=paste0("sample",1:6)
    rownames(exp)=paste0("gene",1:10)
    #一般分析得到的数据格式:样本为变量/列,基因表达为观测
    
    • paste0 默认没有分隔符;paste默认空格为空格符。不过分隔符都可通过seq=""互相设置。这就是懒的奥义吧,哈哈~
    dat=t(exp)
    #因为要绘制基因量的箱线图,变量与观测要转置一下
    group=rep(c("A","B"),each=3)
    #设置分组标签
    dat=cbind.data.frame(dat,group)
    
    • 以上就得到了完整的数据表


      假设数据

    绘图方法1:patchwork包

    p=list()
    #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)) 
    }
    
    • ggplot()的选项一般为dataaes分别交代数据源以及绘图使用的变量。
    • 但是如果需要循环绘图时,将aes改成aes_string,它可以将字符变量映射为ggplot所需的输入参数。
      -比如例子中的 y=colnames(dat)[i]分别取gene1、gene2......到gene10。
      -还有就是上述是分别做了十张单图,储存在一个列表了,下面将进行拼图组合。
    library(patchwork)
    # 第一次使用需要安装
    wrap_plots(p,nrow=2, guides="collect")
    
    • guides="collect"参数 guides应该是绘图示例的意思;"collect"表示所有图共用一组绘图示例(我刚才试了下删除这个参数,果然每个图都配有了相同的绘图示例,就有些多余了。)
      patchwork包拼图结果

    绘图方法2:ggplot2法

    library(tidyr)
    library(dplyr)
    library(ggplot2)
    
    • 这次需要加载三个包(前两个包的作者是一个人,厉害),同时还是要第一步准备的数据dat
    dat2 = gather(dat,key = "gene",value = "expression",-group)
    
    • 关于这一步的操作,详见gather()的用法
    • 在我理解,就是把所有基因的观测放在一列里(这里就是基因数据都放在单独一列 )key交代基因列命名,value为基因数据命名,以便后面作图。
      gather()函数操作
    ggplot(data = dat2)+
      geom_boxplot(aes(x = group,y = expression,color = group))+
      theme_bw()+
      facet_wrap(~gene,nrow = 2)
    
    • 利用facet_wrap(~gene,nrow = 2) 既交代类分图的依据gene,也交代了多图排列成两行。有趣的是,排列顺序有问题如下图--
      ggplot2(1)
      -于是做如下调整,主要是修改gene列的因子
    dat2$gene=factor(dat2$gene,ordered = TRUE,levels = paste0("gene",1:10))
    ggplot(data = dat2)+
      geom_boxplot(aes(x = group,y = expression,color = group))+
      theme_bw()+
      facet_wrap(~gene,nrow = 2)
    
    • 这样就没问题啦,nice!


      ggplot2(2)

    简单一次小练习,还是涉及到很多知识点的。加油!

    相关文章

      网友评论

        本文标题:R语言练习:基于两组基因差异,循环绘制箱线图组合

        本文链接:https://www.haomeiwen.com/subject/wwbwkhtx.html