物种丰度排序堆积柱形图及处理间各物种丰度非参数检验多组比较的R图形可视化

再美的可视化图形若缺少了统计检验就失去了灵魂而变得华而不实

测试数据及代码链接:https://pan.baidu.com/s/1LJzCNqJe9OcfUmhH9jfvsw
提取码:9ifa

因公众号文章不可修改,如以上链接失效,或想获取代码的更新版,请在“宏基因组”公众号后台回复本文关键字“stackplot”获取最新下载地址

一般做16s扩增子测序,都少不了物种组成分析,但在各文献中同时将处理间各物种丰度进行统计检验R图形可视化操作的寥寥无几,若是文章中将物种组成图与处理间各物种丰度差异统计检验图同时展示将会是一道亮丽的风景。秉持着这种思考,在参考学习众多资料的情况下敲下了如下代码:

当然用的数据依然是刘永鑫老师的经典范例数据,方便需要的人共同学习进步,提出宝贵建议!

rm(list=ls())
library(tidyverse)#数据整理与数据转换包,用了一些更好用更易懂的函数
library(ggprism)
library(vegan)
otu <- read.delim('./otutab.txt',row.names = 1)
head(otu, n = 3)
#otu <-decostand(otu,'total',2)#按列标准化otu
#colSums(otu)#若想后面做成相对丰度的差异比较,可把这两行释放出来即可
tax <- read.delim('./taxonomy.txt',row.names = 1)
head(tax, n = 3)
metadata<- read.delim('./metadata.tsv')
head(metadata, n = 3)
dat <- merge(x=otu,y=tax,by='row.names')
head(dat, n = 3)
dat =dplyr::rename(dat,OTUID = Row.names)
head(dat, n = 3)
##按Phylum水平分组汇总(根据自己需求更改要展示的物种水平)
aa<-aggregate(dat[,2:ncol(otu)],by=list(dat$Phylum),FUN=sum)
head(aa)
########################三种排序方法,任选其一
#1
# aa<- mutate(aa,v=apply(aa[,c(2:ncol(aa))],1,sum))
# cc<- arrange(aa,desc(v))
# head(cc)
# cc<-select(cc,-v)
# head(cc)
# row.names(cc)=cc$Phylum
# head(cc)
# cc<-select(cc,-Phylum)
# head(cc)
#2
# row.names(aa)=aa$Phylum
# head(aa)
# aa<-select(aa,-Phylum)
# head(aa)
# cc<-aa[order(rowSums(aa),decreasing=T),]
#3
row.names(aa)=aa$Group.1
head(aa)
aa<-dplyr::select(aa,-Group.1)
head(aa, n = 3)
#根据行求和结果对数据排序
order<-sort(rowSums(aa[,2:ncol(aa)]),index.return=TRUE,decreasing=T)
#根据列求和结果对表格排序
cc<-aa[order$ix,]
head(cc, n = 3)
##只展示排名前10的物种,之后的算作Others(根据需求改数字)
dd<-rbind(colSums(cc[11:as.numeric(length(rownames(cc))),]),cc[10:1,])
head(dd, n = 3)
rownames(dd)[1]<-"Others"
head(dd, n = 3)
##再与metadata合并
bb<-merge(t(dd),dplyr::select(metadata,SampleID,Group),by.x = "row.names",by.y ="SampleID")
head(bb, n = 3)
##宽数据变长数据
kk<-tidyr::gather(bb,Phylum,Abundance,-c(Group,Row.names))
#将未注释到的Unassigned也改为Others,你也可以不改,有以下两种方式
kk$Phylum<-ifelse(kk$Phylum=='Unassigned','Others',kk$Phylum)#1
#kk[kk$Phylum=='Unassigned','Phylum']='Others'               #2
##根据Group,Phylum分组运算
hh <- kk %>%group_by(Group,Phylum) %>%dplyr :: summarise(Abundance=sum(Abundance))
head(hh, n = 3)
##更改因子向量的levels
hh$Phylum = factor(hh$Phylum,order = T,levels = row.names(dd))
yanse <-c("#999999","#F781BF","#A65628","#FFFF33","#FF7F00","#984EA3","#4DAF4A","#377EB8","#74D944","#E41A1C","#DA5724","#CE50CA", "#D3D93E","#C0717C","#CBD588","#D7C1B1","#5F7FC7","#673770", "#3F4921","#CD9BCD","#38333E","#689030","#AD6F3B")#要确保颜色够用,否则会报错
##按物种丰度排序好的堆积柱形图
p1 <- ggplot(hh,aes(x = Group,y = Abundance,fill = Phylum)) + geom_bar(position="fill",stat = "identity",width = 0.5) +scale_fill_manual(values = yanse) +labs(x='Group',y='Abundance(%)')+scale_x_discrete(limits = c("KO","OE","WT"))+guides(fill=guide_legend(reverse = TRUE))+ggprism::theme_prism()+scale_y_continuous(expand = c(0,0))
p1#由于把Unassigned也算成了Others,所以只显示9个物种

###进行处理间各物种非参数检验的多组比较
#数据整理与转换
head(bb,n = 3)
cc =dplyr::select(bb,Row.names,Group,everything(),-c(Others,Unassigned))
head(cc,n = 3)
dat <- gather(cc,Phylum,v,-(Row.names:Group))
head(dat,n = 3)
(参见之前推送,一共写了五种多重比较的方法,总有一款适合你)
##非参数检验的多组比较函数
PMCMR_compare1 <- function(data,group,compare,value){library(multcompView)library(multcomp)library(PMCMRplus)library(PMCMR)a <- data.frame(stringsAsFactors = F)type <- unique(data[,group])for (i in type){g1=comparesub_dat <- data[data[,group]==i,]names(sub_dat)[names(sub_dat)==compare] <- 'g1'names(sub_dat)[names(sub_dat)==value] <- 'value'sub_dat$g1 <- factor(sub_dat$g1)options(warn = -1)k <- PMCMRplus::kwAllPairsNemenyiTest(value ~ g1,data=sub_dat)n <- as.data.frame(k$p.value)h <- n %>%mutate(compare=rownames(n)) %>%gather(group,p,-compare,na.rm = TRUE) %>%unite(compare,group,col="G",sep="-")dif <- h$pnames(dif) <- h$GdifdifL <- multcompLetters(dif)K.labels <- data.frame(difL['Letters'], stringsAsFactors = FALSE)K.labels$compare = rownames(K.labels)K.labels$type <- imean_sd <- merge(aggregate(sub_dat[['value']],by=list(sub_dat[,'g1']),FUN=sd),aggregate(sub_dat[['value']],by=list(sub_dat[,'g1']),FUN=mean),by="Group.1")names(mean_sd) <- c('compare','std','mean')a <- rbind(a,merge(mean_sd,K.labels,by='compare'))}names(a) <- c(compare,'std','mean','Letters',group)return(a)
}
##################################用函数运行输入的数据
df2 <- PMCMR_compare1(dat,'Phylum','Group','v')
df2########字母标正着标(a>b>c)(之后跑自己的数据可能出现相反的顺序,不影响结果,可在AI或PDF编辑器中调)
p2 = ggplot(dat,aes(Group,v))+geom_boxplot(aes(color=Group))+geom_text(data=df2,aes(x=Group,y=mean+2*std,label=Letters))+geom_jitter(aes(fill=Group),position = position_jitter(0.2),shape=21,size=1,color="black")+facet_wrap(~Phylum,scales = "free_y")+ labs(x='Group',y='ASVs')+ggprism::theme_prism()+theme(axis.text.x = element_text(angle = 45))
p2

Output figure width and height
Letter纸图片尺寸为单栏89 mm,双栏183 mm,页面最宽为247 mm,推荐比例16:10,即半版89 mm x 56 mm; 全版183 mm x 114 mm

##################保存图片ggsave("./p1.pdf", p1, width = 350, height = 200, units = "mm")ggsave("./p2.pdf", p2, width = 350, height = 200, units = "mm")

参考资料

浅析R语言单因素方差分析中的多重比较

扩增子分析 | 一键式抽平和物种组成分析(1)

《R语言数据可视化之美专业图表绘制指南》

《ggplot2:数据分析与图形艺术第二版》

《R数据科学》

作者:旭日阳光、flyfly

责编:马腾飞 南京农业大学

审核:刘永鑫 中科院遗传发育所

猜你喜欢

10000+:菌群分析 宝宝与猫狗 梅毒狂想曲 提DNA发NatureCell专刊肠道指挥大脑

系列教程:微生物组入门 Biostar 微生物组  宏基因组

专业技能:学术图表 高分文章 生信宝典 不可或缺的人

一文读懂:宏基因组 寄生虫益处 进化树

必备技能:提问 搜索  Endnote

文献阅读 热心肠 SemanticScholar Geenmedical

扩增子分析:图表解读 分析流程 统计绘图

16S功能预测   PICRUSt  FAPROTAX  Bugbase Tax4Fun

在线工具:16S预测培养基 生信绘图

科研经验:云笔记  云协作 公众号

编程模板: Shell  R Perl

生物科普:  肠道细菌 人体上的生命生命大跃进  细胞暗战 人体奥秘

写在后面

为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外5000+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。PI请明示身份,另有海内外微生物相关PI群供大佬合作交流。技术问题寻求帮助,首先阅读《如何优雅的提问》

学习16S扩增子、宏基因组科研思路和分析实战,关注“宏基因组”

点击阅读原文,跳转最新文章目录阅读

物种丰度排序堆积柱形图及处理间各物种差异分析相关推荐

  1. ggplot2版聚类物种丰度堆叠图

    文章目录 写在前面 加载依赖关系 导入数据 ggtree绘制聚类树 物种组成数据 整理成facet需要的格式 保证颜色填充独立性 分面组合树和柱图 修改配色 ggtree调整布局 添加样本其他信息 树 ...

  2. 按照物种丰度对OTU表格进行拆分-丰富和稀有物种识别

    稀有物种 (rare taxa, RT),在所有的样本中丰度均低于0.1%: 丰富物种 (abundant taxa, AT),在所有的样本中丰度均高于1%: 中等物种 (moderate taxa, ...

  3. R统计绘图-随机森林分类分析及物种丰度差异检验组合图

    此文主要涉及随机森林组间变量重要性和物种丰度差异检验绘图,包含以下几部分内容: 1)随机森林分类: 2)随机森林分类变量重要性绘图: 3)物种丰度差异检验绘图 4)随机森林分类变量重要性及物种丰度差异 ...

  4. 使用R语言获得16S物种丰度

    还是获得16S物种丰度得老问题,最近在一台新机器上安装qiime1,发现有报错,对于这种停止维护的软件,也是正常现象吧,于是想别的办法解决,恰巧最近读R几本R语言的入门书,发现prop.table() ...

  5. qiime2+biom+qiime1获得16S物种丰度

    我们知道,不管是16S等扩增子测序,还是宏基因组,最后最重要的结果,就是物种的丰度情况了,qiime2给出的16S丰度结果是一个计数,对于许多软件来说这是可用的,那么如果我们想获得一个直接的百分比数据 ...

  6. R堆叠柱状图各成分连线画法:突出展示组间物种丰度变化

    作者:朱微金 李陈浩 堆叠柱状图连线画法 提出问题 18年1月29日宏基因组转载了中科院生态中心邓晔组的文章<土壤细菌定量方法结合相对丰度分析揭示种群的真实变化 >.其中的图3基于堆叠柱状 ...

  7. 16S 物种丰度热图学习

    ### 1. 关于热图的用途(参考http://www.360doc.com/content/17/0729/17/45848444_675155815.shtml) 以RNA-seq为例,热图可以: ...

  8. 相对丰度柱状图matlab,R堆叠柱状图各成分连线画法:突出展示组间物种丰度变化...

    作者:朱微金 李陈浩 堆叠柱状图连线画法提出问题 18年1月29日宏基因组转载了中科院生态中心邓晔组的文章<土壤细菌定量方法结合相对丰度分析揭示种群的真实变化 >.其中的图3基于堆叠柱状图 ...

  9. R统计绘图 | 物种组成堆叠柱形图(绝对/相对丰度)

    一.数据准备 数据使用的不同处理土壤样品的微生物组成数据,包含物种丰度,分类单元和样本分组数据.此数据为虚构,可用于练习,请不要作他用. # 1.1 设置工作路径 #knitr::opts_knit$ ...

最新文章

  1. 个人博客(前端菜鸡)持续开发中,可前往 欢迎访问. www.amayaliu.cn
  2. 2020-11-11(对话框简单总结)
  3. 优化您的ApplicationContext
  4. vlan划分不能上网_VLAN工作原理
  5. Oracle的order by的中文排序问题
  6. tar: /usr/app: Not found in archive
  7. Atitit code 范例 example code 范例 example 更好一些,将最佳实践融入其中。。目录第一章 Springboot 1第二章 Rest api 1第一节
  8. 慕课python第六周测验答案_大学慕课2020Python编程基础章节测验答案
  9. 最简单的WIN7内核PE系统(U盘,硬盘,移动硬盘版支持原版WIN7安装
  10. matlab多个图例,Matlab 画多个图例( Plot multiple legends )
  11. Android studio gradle编译失败问题汇总
  12. VS Code 配置 Rust-Analyzer
  13. Windows装机必备设置,软件安装
  14. mysql查看备份文件_MySQL的备份与还原以及常用数据库查看命令
  15. 大商超,小便利,商盟卡统统都能刷
  16. 操作简便的JPG图片转为PDF转换器
  17. Java 将文本内容、网址 ;生成二维码 解析二维码
  18. Foursquare 勋章分析
  19. Vista下的UAC功能
  20. 初次联系导师短信模板_复试联系导师邮件怎么写?4个模板帮你解决!

热门文章

  1. 为什么顶尖高手,都是长期主义者?
  2. 程序化广告(4):考核指标
  3. 腾讯某员工哀叹:门口卖早点的送孩子去私立了,一年学费顶我一年工资!
  4. 与其羡慕他人精彩,还不如设法活出自我
  5. 敏捷原则比敏捷框架更重要
  6. 提高工作效率,请收下这8个神器
  7. Oracle系统简介
  8. 找出数组中重复的数字---多思路
  9. 实验四 使用C++的mfc实现圆心为任意位置的圆的绘制。
  10. Java axis 配置host_Java AxisProperties类代码示例