ggplot2绘图数据-R语言-图表-决策-Linux-PythonR语言做生信

ggplot收尾篇 神助攻gridExtra

2018-09-02  本文已影响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)
暂时不明白这个配色梯度怎么和我的不一样
上一篇下一篇

猜你喜欢

热点阅读