ggplot收尾篇 神助攻gridExtra

作者: 小洁忘了怎么分身 | 来源:发表于2018-09-02 23:04 被阅读170次
    微信公众号生信星球同步更新我的文章

    终于要收尾啦!!开心到飞起

    1.示例数据

    在公众号回复:dexp.csv,获得示例数据。
    示例数据和学习内容来自基因课。
    读取数据:

    dexp <- read.csv("dexp.csv",row.names = 1)#设置第一列为行名
    library(ggplot2)
    library(gridExtra)
    

    示例数据:40个基因,每个基因9个重复,加上这9个重复各自的观测值,以及每个基因的长度。
    作三种不同类型的图:

    p <- ggplot(data = dexp)
    
    ##密度图
    p_density <- p + geom_density(
      aes(Expression, color = Sample)
    )
    
    ##箱线图
    p_boxplot <- p + geom_boxplot(
      aes(x = Sample, y = Expression, color = Group)
    )
    
    data_boxplot <- ggplot_build(p_boxplot)$data[[1]]
    
    ##小提琴图
    p_violin <- p + geom_violin(
      aes(x = Sample, y = Expression, fill = Group)
    )
    

    2.拼图小成

    之前用过grid.arrange这个函数,可以将三个图拼起来

    grid.arrange(p_density, p_boxplot, p_violin)
    

    此处提出进阶做法:将图片存放在列表中,拼图时直接读取列表。在要拼的图片较多时就会看到他的好处。

    plots <- list(p_density, p_boxplot, p_violin) 
    grid.arrange(grobs = plots)
    #用列表存放图片名称,列表是一种特殊的格式,可以存放其他数据类型 
    

    3.自定义图片布局

    (1)简单布局

    设置每列显示几个图用ncol,此外还可以给拼后的图片加标题,注意,单个图片的标题设置用title,这里设置拼后的名字,直接用top

    grid.arrange(grobs = plots, ncol = 2,
                 top = "bioinfoplanet")
    

    (2)复杂布局

    如果想让小提琴图占第二行的正行,应该怎么做?
    答案是设置一个布局矩阵,让三张图片根据这个布局来排列。

    lay1 = rbind(c(1, 2),
                c(3, 3)) #布局矩阵
    grid.arrange(grobs = plots, 
                 layout_matrix = lay1) #等于一个布局matrix 矩阵
    

    注意,这里的1,2,3是编号顺序,是根据列表里图片名称顺序来决定的。



    此外rbind是行拼接的意思,把两个向量按照行拼接起来,就成为一个表格,我们用这个表格来做表达矩阵。



    也就是说 1,2在第一行,3占据第二行。
    lay2 = rbind(c(1, 3),
                      c(2, 3))
    grid.arrange(grobs = plots,
                 layout_matrix = lay1,
                 widths = c(1, 2),  #第一列的宽度为1,第二列的宽度为2
                 heigths = c(1, 0.5))  #第二行的高度设置小,为什么我没有发现变化
    

    widths 和heigths是对图片的宽度和高度进行设计,这里用向量的形式设置了列之间的宽度比例,行之间的高度比例。但我这里高度调整没有成功,暂时没有找出原因,有看懂的读者欢迎指出哦。


    (3)更复杂的网状布局

    arrangeGrob和gridarrange的区别是,前者可以赋值给一个变量。

    p1 <- arrangeGrob(grobs = plots, 
                 layout_matrix = lay1)
    p2 <- arrangeGrob(grobs = plots,
                 layout_matrix = lay2)
    grid.arrange(p1, p2, ncol = 2)
    

    当需要更复杂的拼接的时候会需要用到。

    ####(4)生成多页导出为pdf
    ml <- marrangeGrob(grobs = plots, nrow=2, ncol=1) #m表示多个,每页两列一行,也就是两个图,注意这里的行数列数是每页的分布,缺一不可。
    ggsave("multipage.pdf", ml)
    

    刚才豆豆同学扔来几行代码
    正好补充上 coord_flip(翻转坐标系)和coord_polar(极坐标系)

    bar <- ggplot(diamonds)+
      geom_bar(aes(x= cut, fill=cut),
               show.legend = F,
               width = 1)+
      theme(aspect.ratio = 1)+
      labs(x = "Doodle", y = "Jessie")
    #对比一下
    bar1 <- bar + coord_flip()
    bar2 <- bar + coord_polar()
    grid.arrange(bar1,bar2, ncol = 2)
    
    暂时不明白这个配色梯度怎么和我的不一样

    相关文章

      网友评论

      本文标题:ggplot收尾篇 神助攻gridExtra

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