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

    终于要收尾啦!!开心到飞起 1.示例数据 在公众号回复:dexp.csv,获得示例数据。示例数据和学习内容来自基因...

  • 可视化-鸢尾花

    R语言: 需要使用包:绘图包ggplot2、gridExtra(图形分布)、GGally(ggplot扩展,适合做...

  • gridExtra

    Provides a number of user-level functions to work with "g...

  • R绘图合并

    gridExtra包的grid.arrange函数

  • 收尾篇

    一个月又过去了,从4月份开始参加写作,不为别的,只为自己的表达能够顺畅有逻辑,不止浮于表面,有思考。 每天深挖自己...

  • ggplot2分面的简单小例子

    使用到的数据是东契奇19-20赛季常规赛得分、篮板、和助攻的数据。 ggplot2分面可以使用facet_grid...

  • R语言之ggplot2画图篇

    R语言之ggplot2画图篇

  • 2022.09.18(XS)

    1.今天准备面试 2.昆仑神宫收尾 昆仑神宫看完了

  • R - 图片组合排版

    拼图包 目前常见的拼图包有customLayout、cowplot、grid、gridExtra 。patchwo...

  • R: 密度图

    输入 ggplot 1 ggplot 2 ggplot3

网友评论

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

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