对于右侧散点图所需要的数据,在上一步差异学检验的结果中已经给出了,我们只需要提取对应的数据列,之后根据差异的正负给其赋予对应的分组信息,最后按照差异丰度的大小对数据进行重新的排序
diff.mean <- diff[,c("var","estimate","conf.low","conf.high")]diff.mean$Group <- c(ifelse(diff.mean$estimate >0,levels(data1$Group)[1],levels(data1$Group)[2]))diff.mean <- diff.mean[order(diff.mean$estimate,decreasing = TRUE),]
左侧条形图在绘制条形图之前,要把物种或基因名按照其组间丰度差异从大到小进行一个排序,以便图像的美观 。
在画图之前首先要根据物种或基因丰度的差异大小,对变量的名称设置一个因子并排序,以保证两幅图变量排序的一致性 。
library(ggplot2)cbbPalette <- c("#E69F00", "#56B4E9")abun.bar$variable <- factor(abun.bar$variable,levels = rev(diff.mean$var))接下来绘制图像 。
p1 <- ggplot(abun.bar,aes(variable,Mean,fill = Group)) +scale_x_discrete(limits = levels(diff.mean$var)) +coord_flip +xlab("") +ylab("Mean proportion (%)") +theme(panel.background = element_rect(fill = 'transparent'),panel.grid = element_blank,axis.ticks.length = unit(0.4,"lines"),axis.ticks = element_line(color='black'),axis.line = element_line(colour = "black"),axis.title.x=element_text(colour='black', size=12,face = "bold"),axis.text=element_text(colour='black',size=10,face = "bold"),legend.title=element_blank,legend.text=element_text(size=12,face = "bold",colour = "black",margin = margin(r = 20)),legend.position = c(-1,-0.1),legend.direction = "horizontal",legend.key.width = unit(0.8,"cm"),legend.key.height = unit(0.5,"cm"))for (i in 1:(nrow(diff.mean) - 1))p1 <- p1 + annotate('rect', xmin = i+0.5, xmax = i+1.5, ymin = -Inf, ymax = Inf,fill = ifelse(i %% 2 == 0, 'white', 'gray95'))p1 <- p1 +geom_bar(stat = "identity",position = "dodge",width = 0.7,colour = "black") +scale_fill_manual(values=cbbPalette)

文章插图
本来是不想用循环添加矩形的方式来实现灰白较差的底纹的,但是研究了半天也没找到更方便的办法,各位要是有更简便的办法欢迎私聊~~
这里要特别注意图层的顺序,一定要在添加举行之后在绘制条形图,不然会覆盖掉 。
右侧散点图同样要先对变量名进行一个因子排序,保证两个图像的变量顺序的一致 。
此外散点图要在右侧添加校正后的p-value,因此需要先对p-value取有效数字,之后转换成文本 。
diff.mean$var <- factor(diff.mean$var,levels = levels(abun.bar$variable))diff.mean$p.value <- signif(diff.mean$p.value,3)diff.mean$p.value <- as.character(diff.mean$p.value)本来是想画散点图的同时直接把p-value的文本加上,但是由于这幅图p-value的文本是添加在绘图区以外的,研究了半天没弄明白,后来给分成了两个图,一副图只有散点图,另一副图只有右侧的p-value文本 。散点图的绘制 。
p2 <- ggplot(diff.mean,aes(var,estimate,fill = Group)) +theme(panel.background = element_rect(fill = 'transparent'),panel.grid = element_blank,axis.ticks.length = unit(0.4,"lines"),axis.ticks = element_line(color='black'),axis.line = element_line(colour = "black"),axis.title.x=element_text(colour='black', size=12,face = "bold"),axis.text=element_text(colour='black',size=10,face = "bold"),axis.text.y = element_blank,legend.position = "none",axis.line.y = element_blank,axis.ticks.y = element_blank,plot.title = element_text(size = 15,face = "bold",colour = "black",hjust = 0.5)) +scale_x_discrete(limits = levels(diff.mean$var)) +coord_flip +xlab("") +ylab("Difference in mean proportions (%)") +labs(title="95% confidence intervals")for (i in 1:(nrow(diff.mean) - 1))p2 <- p2 + annotate('rect', xmin = i+0.5, xmax = i+1.5, ymin = -Inf, ymax = Inf,fill = ifelse(i %% 2 == 0, 'white', 'gray95'))p2 <- p2 +geom_errorbar(aes(ymin = conf.low, ymax = conf.high),position = position_dodge(0.8), width = 0.5, size = 0.5) +geom_point(shape = 21,size = 3) +scale_fill_manual(values=cbbPalette) +geom_hline(aes(yintercept = 0), linetype = 'dashed', color = 'black')
文章插图
p-value文本的绘制 。
p3 <- ggplot(diff.mean,aes(var,estimate,fill = Group)) +geom_text(aes(y = 0,x = var),label = diff.mean$p.value,hjust = 0,fontface = "bold",inherit.aes = FALSE,size = 3) +geom_text(aes(x = nrow(diff.mean)/2 +0.5,y = 0.85),label = "P-value (corrected)",srt = 90,fontface = "bold",size = 5) +coord_flip +ylim(c(0,1)) +theme(panel.background = element_blank,panel.grid = element_blank,axis.line = element_blank,axis.ticks = element_blank,axis.text = element_blank,axis.title = element_blank)
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 天黑黑孙燕姿在线试听 孙燕姿天黑黑是什么语言
- C 语言实现的跨平台开发库 TBOX
- 家庭语言暴力危害不容忽视
- 在C语言中如何高效地复制和连接字符串?
- 「C语言」常用算法
- 茶文化与公益完美结合深圳新增个人命名基金
- C语言有多少个关键字,你知道吗?
- 汉语是不是全球最难的 世界上公认最难的语言排名
- C语言的三套标准:C89、C99、C11
- 工藤静香|51岁工藤静香重现忧郁气质,豪宅内拎LV摆拍,被吐槽穿搭无季节感
