主编寄语
微生物组发展到现在,相关分析技术和体系已经十分成熟,而微生物组数据的分析方法更是各式各样,我们借助“R语言在微生物组的最佳实践”这篇之前我们发表的论文带领大家从简单到困难,从基础到流程,从单一功能到组合功能,从上游分析到下游分析的全部代码。全套流程全部借助于Rstudio作为平台,在win和linux和mac下都可以完善运行,大家可以自己准备相关硬件资源,跟着我们这批教程进行全面学习。
这篇综述是我们小组在2023年发表在protein cell 期刊,整体内容几乎囊括了微生物组数据分析的全部内容,代码脚本有2w+行,全部属于公开分享阶段,但由于内容很多,为了方便大家理解和使用学习,这里选择分期带大家运行。
微生信生物分享的这批内容经过如下步骤:
同学A进行代码整理运行,基础注释书写,形成分享稿件的基本样貌;
同学B对代码复现一遍,解决其中无法顺利运行的地方,以及再次注释内容无法让自己明白的地方,完善分享稿件;
同学C再次运行一遍,进行全部流程代码学习,继续注释自己不明白的地方,最终形成完善分享稿件。
我们希望通过这个教程带领需要学习的小伙伴开启全民免费学习微生物组联合挖掘时代。给大家尽量做高质量的教程;
写在前面
“R语言在微生物组的最佳实践”的综述流程,差异分析已经学习了一部分。
今天继续带大家学习一下:差异分析另外几种展示方式(曼哈顿图、热图/气泡图、多组火山图)
需要注意的是:每次分析之前,需要加载”数据分析准备“ 这一节的代码,才可以开始下游分析
这次的分享内容希望能够帮助大家更加深入的挖掘自己的数据,给大家带来分析数据的便捷,同时也欢迎大家可以引用我们的文章。
下面是文章的具体信息:
Wen, T., et al., The best practice for microbiome analysis using R. Protein & Cell, 2023. 14(10): p. 713-725.
文章链接:https://doi.org/10.1093/procel/pwad024
流程实践数据:https://github.com/taowenmicro/EasyMicrobiomeR
数据代码获取地址
数据地址:https://github.com/taowenmicro/EasyMicrobiomeR/tree/master/data
全套数据代码整套流程下载地址:https://github.com/taowenmicro/EasyMicrobiomeR/tree/master
物种差异分析常用图形
曼哈顿图
曼哈顿图(manhattanplot),因其形似曼哈顿摩天大楼,故俗称为曼哈顿图。本质上是散点图,一般用于展示大量非零的波动数据,y轴高点显示出具有强相关性的位点,最早应用于全基因组关联分析(GWAS)研究中,可以一目了然地看基因的频率、分布。
在生物信息学和统计学领域,edgeR-曼哈顿图是一种用于展示基因表达数据或微生物组数据分析结果的可视化工具。本质上是散点图,一般用于展示大量非零的波动数据,y轴高点显示出具有强相关性的位点,每个点代表一个基因或操作单元(OTU)的统计显著性。最早应用于全基因组关联分析(GWAS)研究中,可以一目了然地看基因的频率、分布。
曼哈顿图在宏基因组学和微生物组数据分析中被广泛应用,尤其是在展示差异OTU(操作分类单元)结合分类学结果方面表现出色。edgeR是R语言中一个流行的包,它提供了多种方法来分析和可视化基因表达数据,包括曼哈顿图的绘制。
热图
热图是一种很常见的图,其基本原则是用颜色代表数字,让数据呈现更直观、对比更明显。常用来表示不同样品组代表性基因的表达差异、不同样品组代表性化合物的含量差异、不同品之间的两两相似性。实际上,任何一个表格数据都可以转换为热图展示。热图通过将数据矩阵中的各个值按一定规律映射为颜色展示,利用颜色变化来可视化比较数据。当应用于数值矩阵时,热图中每个单元格的颜色展示的是行变量和列变量交叉处的数据值的大小;若行为基因,列为样品,则是对应基因在对应样品的表达值;若行和列都为样品,展示的可能是对应的两个样品之间的相关性。
数字映射到颜色可以分为线性映射和区间映射。线性映射是每个值都对应一个颜色,区间映射是把数值划分为不同的区间块,每个区间块的所有数字采用同一个颜色显示。两者没有优劣好坏之分,具体使用取决于展示意图。
气泡图
数据呈现方式多种多样,气泡图(bubble chart)是其中的一种,常用于展示三维变量关系。
气泡图与散点图类似,如下图所示绘制气泡图时将一个变量放在 X 轴,另一个变量放在 Y 轴,气泡的大小表示第三个变量(指示相对应重要程度)。
多组差异分析火山图
一种在生物信息学和基因表达研究中常用的数据可视化工具,它用于展示不同实验组之间的基因表达差异。火山图通过直观的方式揭示了哪些基因在不同条件下表现出显著的变化,从而帮助研究者识别潜在的生物标志物或关键基因。
实例介绍
气泡图
以下图片来自“Tapping the rhizosphere metabolites for the prebiotic control of soil-borne bacterial wilt disease”文章,于2023年发表于Nature Communications,查看链接 https://www.nature.com/articles/s41467-023-40184-2
图例书写参考
c:Bubble plot showed the enriched pathways of metagenomic data from rhizosphere of three Solanaceae crops after metabolites application
以下图片来自“Deciphering the mechanism of fungal pathogen-induced disease-suppressive soil”文章,于2023年发表于New Phytologist,查看链接:https://nph.onlinelibrary.wiley.com/doi/full/10.1111/nph.18886
图例书写参考
a:The bubble plot depicts the differential metabolites between FOC infected and control (no pathogen) cucumber root exudates. Bar plot on the top displays the difference in distinct metabolites between FOC and the control. An asterisk after the metabolites name indicates that a metabolite was significantly enriched in FOC.
下面开始实践操作
edgeR-曼哈顿图
在edgeR包中,曼哈顿图通常用于展示差异表达分析的结果。这些分析可以帮助研究者识别在不同条件下显著变化的基因或OTU。在微生物组研究中,这可能涉及到比较健康和疾病状态、不同环境条件或不同时间点的样本。
曼哈顿图的特点
X轴:通常表示OTU或其他特征的分类学排序,例如按照分类学目(order)或门(phylum)水平进行排序。
Y轴:表示统计显著性,通常取负对数(-log10)的P值,这样显著性更高的点会位于图的上方,更容易被观察到。
点:每个点代表一个OTU或基因,点的大小和颜色可以表示不同的信息,如相对丰度或分类学归属。
水平线:表示不同的显著性阈值,如0.05或0.01,方便识别哪些点超过了特定的显著性水平。
应用场景
edgeR-曼哈顿图在微生物组学、转录组学和基因组学等领域有广泛的应用。它可以帮助研究者:
发现生物标志物:识别与特定疾病状态或环境条件相关的基因或OTU。
理解生物学过程:通过分析差异表达的基因或OTU,揭示潜在的生物学机制。
数据解释和展示:为同行评审和科学交流提供直观的数据可视化。
diffpath = paste(otupath,"/diff_Manhattan/",sep = "")
dir.create(diffpath)
ps = ps
pvalue = 0.05
lfc = 0
diffpath = diffpath
# otu化
count = ps %>%
ggClusterNet::vegan_otu() %>%
t()
# create DGE list
# 制作DGE序列
# DGEList是一个可以包含多种内容和统计的列表。DGEList至少需要的元素:counts、samples(包含group分组信息和lib.size文库大小),counts用来存放表达矩阵,samples用来标记样本信息和库的大小,group声明组别
d = edgeR::DGEList(counts=count, group= phyloseq::sample_data(ps)$Group)
d = edgeR::calcNormFactors(d)
design.mat = model.matrix(~ 0 + d$samples$group)
colnames(design.mat)=levels(as.factor(phyloseq::sample_data(ps)$Group))
d2 = edgeR::estimateGLMCommonDisp(d, design.mat)
d2 = edgeR::estimateGLMTagwiseDisp(d2, design.mat)
fit = edgeR::glmFit(d2, design.mat)
# fit里有系数、拟合值等数值
Desep_group <- as.character(levels(as.factor(phyloseq::sample_data(ps)$Group)))
Desep_group
# 显示分类的组名
aaa = combn(Desep_group,2)
# 两两间的组合
# 开始做分析
for (i in 1:dim(aaa)[2]) {
# i = 1
Desep_group = aaa[,i]
print( Desep_group)
group = paste(Desep_group[1],Desep_group[2],sep = "-")
group
BvsA <- limma::makeContrasts(contrasts = group,levels=design.mat)#注意是以GF1为对照做的比较
# 组间比较,统计Fold change, Pvalue
lrt = edgeR::glmLRT(fit,contrast=BvsA)
# FDR检验,控制假阳性率小于5%
de_lrt = edgeR::decideTestsDGE(lrt, adjust.method="fdr", p.value=pvalue,lfc=lfc)#lfc=0这个是默认值
summary(de_lrt)
# 导出计算结果
x=lrt$table
x$sig=de_lrt
x$sig=de_lrt
head(x)
#------差异结果符合otu表格的顺序
row.names(count)[1:6]
x <- cbind(x, padj = p.adjust(x$PValue, method = "fdr"))
enriched = row.names(subset(x,sig==1))
depleted = row.names(subset(x,sig==-1))
x$level = as.factor(ifelse(as.vector(x$sig) ==1, "enriched",ifelse(as.vector(x$sig)==-1, "depleted","nosig")))
x$otu = rownames(x)
x$neglogp = -log(x$PValue)
tax = ps %>%
ggClusterNet::vegan_tax() %>%
as.data.frame()
head(tax)
x = cbind(x,tax)
head(x)
top_phylum=c("Bacteroidetes","Firmicutes","Planctomycetes","Proteobacteria","Verrucomicrobia")
# 在这里改想要呈现的门
x[!(x$Phylum %in% top_phylum),]$Phylum = "Low Abundance" # no level can get value
x$otu = factor(x$otu, levels=x$otu) # set x order
x$level = factor(x$level, levels=c("enriched","depleted","nosig"))
levels(x$Phylum)=c(top_phylum,"Low Abundance")
x = x %>% arrange(Phylum)
head(x)
x$otu = factor(x$otu, levels=x$otu)
# if (tem != 0) {
# tem = x[x$neglogp>15,] %>% nrow()
# }
FDR = min(x$neglogp[x$level=="depleted"])
p = ggplot(x, aes(x=otu, y=neglogp, color=Phylum, size=logCPM, shape=level)) +
geom_point(alpha=.7) +
geom_hline(yintercept=FDR, linetype=2, color="lightgrey") +
scale_shape_manual(values=c(17, 25, 20))+
scale_size(breaks=c(5, 10, 15)) +
labs(x="OTU", y="-loge(P)") +
theme(axis.ticks.x=element_blank(),axis.text.x=element_blank(),legend.position="top") +
scale_color_manual(values = c(RColorBrewer::brewer.pal(9,"Set1")))
p
filename = paste(diffpath,"/",paste(Desep_group[1],Desep_group[2],sep = "_"),"Manhattan_plot.pdf",sep = "")
ggsave(filename,p,width = 16,height = 6)
filename = paste(diffpath,"/",paste(Desep_group[1],Desep_group[2],sep = "_"),"Manhattan_plot.png",sep = "")
ggsave(filename,p,width = 16,height = 6,dpi = 72)
}
在图中每个点代表一个微生物,纵轴为每个微生物计算出来的Pvalue取-log10,横轴为微生物所属的门。三角形向上为富集,向下反之。大小为longPCM的值,logCPM: log2 counts-per-million.
LogCPM是每百万的对数计数,可以被理解为测量表达式水平。
Heatmap + Bubble diagram (热图+气泡图)
热图(Heatmap)
热图是一种通过颜色变化来展示数值大小的图表。在生物信息学中,热图常用于展示基因表达数据、微生物群落的相对丰度等。颜色的深浅通常代表数值的高低,使得用户可以快速识别数据中的模式和趋势。
特点:
直观展示数值范围和变化。
适合展示矩阵形式的数据。
可以通过颜色梯度快速识别最大值和最小值。
使用场景:
基因表达分析:在生物信息学中,热图常用于展示基因在不同条件下的表达水平。
微生物群落结构:在生态学和微生物学中,热图可以展示不同样本中微生物的相对丰度。
气泡图(Bubble Chart)
气泡图是一种散点图的变体,通过在二维平面上绘制气泡来展示三个维度的数据。气泡的大小代表数据的第三个维度,这使得气泡图能够展示更多信息。
特点:
适合展示三个维度的数据关系。
气泡的大小和位置提供额外的信息量。
可以通过调整气泡的透明度来展示数据的密度。
热图+气泡图结合使用
结合使用热图和气泡图可以提供更为丰富和深入的数据展示。例如,在生物信息学中,可以在热图的基础上,通过气泡图展示特定基因或蛋白质的表达量或显著性,使得研究者能够同时观察到数据的多个维度。在市场分析中,热图可以展示不同地区的销售情况,
总之,热图和气泡图各自具有独特的优势,它们可以单独使用,也可以结合使用,以适应不同的数据可视化需求。通过合理地设计和应用这两种图表,可以有效地传达复杂的信息。
ps = readRDS("./data/dataNEW/ps_16s.rds")
#==这里有点小问题,就是我的电脑没有ps_16s.rds文件,我用的是另一个rds文件,可能出图有点区别==
heatpath = paste(otupath,"/heapmap_boplot/",sep = "")
dir.create(heatpath)
map = phyloseq::sample_data(ps)
map$ID = row.names(map)
phyloseq::sample_data(ps) = map
j = 2 #做门
ps_tem = ps %>%
ggClusterNet::scale_micro(method = "TMM") %>%
ggClusterNet::tax_glom_wt(ranks = j)
rowSD = function(x){
apply(x,1, sd)
}
rowCV = function(x){
rowSD(x)/rowMeans(x)
}
id <- ps %>%
ggClusterNet::scale_micro(method = "TMM") %>%
ggClusterNet::tax_glom_wt(ranks = j) %>%
ggClusterNet::filter_OTU_ps(100) %>%
ggClusterNet::vegan_otu() %>%
t() %>% as.data.frame() %>%rowCV %>%
sort(decreasing = TRUE) %>%
head(20) %>%
names()
# 得到门类的名字
ps_rela= ps_tem
heatnum = 20
label=TRUE
col_cluster=TRUE
row_cluster=TRUE
map = phyloseq::sample_data(ps_rela)
map$ID = row.names(map)
phyloseq::sample_data(ps_rela) = map
otu = as.data.frame(t(ggClusterNet::vegan_otu(ps_rela)))
otu = as.matrix(otu[id,])
ps_heatm = phyloseq::phyloseq(
phyloseq::otu_table(otu,taxa_are_rows = TRUE),
phyloseq::tax_table(ps_rela),
phyloseq::sample_data(ps_rela)
)
# print(ps_heatm)
# 得到otu表
datah <- as.data.frame(t(ggClusterNet::vegan_otu(ps_heatm)))
head(datah)
tax = as.data.frame(ggClusterNet::vegan_tax(ps_heatm))
otutaxh = cbind(datah,tax)
head(otutaxh)
otutaxh$id = paste(row.names(otutaxh),otutaxh$Genus,sep = "_")
# otutaxh$id = row.names(otutaxh)
row.names(otutaxh) = otutaxh$id
# 转化成dataframe
data <- otutaxh[,c("id",phyloseq::sample_names(ps))]
rig <- data[,phyloseq::sample_names(ps)] %>% rowMeans() %>% as.data.frame()
head(rig)
# 算出均值并排序
colnames(rig) = "MeanAbundance"
rig$id = row.names(rig)
rig = rig %>% dplyr::arrange(MeanAbundance)
rig$id = factor(rig$id,levels = rig$id)
p_rig = ggplot(rig) + geom_bar(aes(y = id,x = MeanAbundance),
fill = "#A54657",
stat = "identity") + theme_void()
tem = data[,phyloseq::sample_names(ps)] %>% as.matrix()
tem = scale(t(tem)) %>% t() %>%
as.data.frame()
data[,phyloseq::sample_names(ps)] = tem
# 计算距离矩阵,出分类树
# data[data > 0.3]<-0.3
mat <- data[,-1] #drop gene column as now in rows
if (col_cluster == TRUE) {
clust <- hclust(dist(mat %>% as.matrix())) # hclust with distance matrix
ggtree_plot <- ggtree::ggtree(clust)
}
if (row_cluster == TRUE) {
v_clust <- hclust(dist(mat %>% as.matrix() %>% t()))
ggtree_plot_col <- ggtree::ggtree(v_clust) + ggtree::layout_dendrogram()
}
if (label == TRUE) {
map = as.data.frame(phyloseq::sample_data(ps))
map$ID = row.names(map)
labels= ggplot(map, aes(x = ID, y=1, fill=Group)) + geom_tile() +
scale_fill_brewer(palette = 'Set1',name="Cell Type") +
theme_void()
}
map = phyloseq::sample_data(ps) %>% as.tibble() %>%
dplyr::arrange(Group) %>% as.data.frame()
map$ID
pcm = reshape2::melt(data, id = c("id"))
pcm$variable = factor(pcm$variable,levels = map$ID)
pcm$id = factor(pcm$id,levels = rig$id)
p1 = ggplot(pcm, aes(y = id, x = variable)) +
# geom_point(aes(size = value,fill = value), alpha = 0.75, shape = 21) +
geom_tile(aes(size = value,fill = value))+
scale_size_continuous(limits = c(0.000001, 100), range = c(2,25), breaks = c(0.1,0.5,1)) +
labs( y= "", x = "", size = "Relative Abundance (%)", fill = "") +
# scale_fill_manual(values = colours, guide = FALSE) +
scale_x_discrete(limits = rev(levels(pcm$variable))) +
scale_y_discrete(position = "right") +
scale_fill_gradientn(colours =colorRampPalette(RColorBrewer::brewer.pal(11,"Spectral")[11:1])(60))+
theme(
panel.background=element_blank(),
panel.grid=element_blank(),
axis.text.x = element_text(colour = "black",angle = 90)
)
colours = c( "#A54657", "#582630", "#F7EE7F", "#4DAA57","#F1A66A","#F26157", "#F9ECCC", "#679289", "#33658A",
"#F6AE2D","#86BBD8")
#----样本在y轴上
p2 = ggplot(pcm, aes(y = id, x = variable)) +
geom_point(aes(size = value,fill = value), alpha = 0.75, shape = 21) +
scale_size_continuous(limits = c(0.000001, 100), range = c(2,25), breaks = c(0.1,0.5,1)) +
labs( y= "", x = "", size = "Relative Abundance (%)", fill = "") +
# scale_fill_manual(values = colours, guide = FALSE) +
scale_x_discrete(limits = rev(levels(pcm$variable))) +
scale_y_discrete(position = "right") +
scale_fill_gradientn(colours =colorRampPalette(RColorBrewer::brewer.pal(11,"Spectral")[11:1])(60)) +
theme(
panel.background=element_blank(),
panel.grid=element_blank(),
axis.text.x = element_text(colour = "black",angle = 90)
)
p1 <- p1 %>%
aplot::insert_right(p_rig, width=.2)
p2 <- p2 %>%
aplot::insert_right(p_rig, width=.2)
if (col_cluster == TRUE) {
p1 <- p1 %>%
aplot::insert_left(ggtree_plot, width=.2)
p2 <- p2 %>%
aplot::insert_left(ggtree_plot, width=.2)
}
if (row_cluster == TRUE) {
p1 <- p1 %>%
aplot::insert_top(labels, height=.02)
p2 <- p2 %>%
aplot::insert_top(labels, height=.02)
}
if (label == TRUE) {
p1 <- p1 %>%
aplot::insert_top(ggtree_plot_col, height=.1)
p2 <- p2 %>%
aplot::insert_top(ggtree_plot_col, height=.1)
}
filename = paste(heatpath,"/",phyloseq::rank.names(ps)[j],"Topggheatmap.pdf",sep = "")
ggsave(filename,p1,width = 14,height = (6 + heatnum/10))
filename = paste(heatpath,phyloseq::rank.names(ps)[j],"Topggbubble.pdf",sep = "")
ggsave(filename,p2,width = 14,height = (6 + heatnum/10))
filename = paste(heatpath,"/",phyloseq::rank.names(ps)[j],"Topggheatmap.png",sep = "")
ggsave(filename,p1,width = 14,height = (6 + heatnum/10))
filename = paste(heatpath,phyloseq::rank.names(ps)[j],"Topggbubble.png",sep = "")
ggsave(filename,p2,width = 14,height = (6 + heatnum/10))
上图为气泡图气泡的大小表示相对丰度变量,颜色表示的是分布情况。
x轴和y轴上有表示相似性的分类树,上图是热图,表示数量的多少。旁边的棕色柱形图表示一个门在不同类别里的分布情况
Multi-group difference analysis volcano plot(多组差异分析火山图)
多组差异分析火山图
一种在生物信息学和基因表达研究中常用的数据可视化工具,它用于展示不同实验组之间的基因表达差异。火山图通过直观的方式揭示了哪些基因在不同条件下表现出显著的变化,从而帮助研究者识别潜在的生物标志物或关键基因。
使用场景
在微生物组学中,火山图可以用来比较不同微生物群落在不同环境或宿主中的组成差异。这有助于理解微生物群落如何响应环境变化,以及它们在生态系统中的作用。
# BiocManager::install("MetBrewer")
diffpath.1 = paste(otupath,"/Mui.Group.v/",sep = "")
dir.create(diffpath.1)
source("./function/EdgerSuper2.R")
res = EdgerSuper2 (ps = ps,group = "Group",artGroup =NULL,
j = "OTU",
path = diffpath.1
)
head(res)
# res里有logFC值,level(enrich/nosing...),p值等相关数据
res$ID = row.names(res)
datv = res
# for循环挑选每个cluster的top前5 gene symbol
tm.g <- function(data){
id = data$group %>% unique()
for (i in 1:length(id)) {
tem = filter(data,group==id[i],level != "nosig") %>%
distinct(ID,.keep_all = TRUE) %>%
top_n(5,abs(logFC))#想改在这里改
if (i == 1) {
tem2 = tem
} else {
tem2 = rbind(tem2,tem)
}
}
return(tem2)
}
top <- tm.g(datv)
# 先画背景柱,根据数据log2FC的max值,min值来确定
#根据数据中log2FC区间确定背景柱长度:
# 长度越长,说明差异越大
head(datv)
tem = datv %>% group_by(group) %>% summarise(max = max(logFC),min = min(logFC)) %>% as.data.frame()
col1<-data.frame(x=tem$group,
y=tem$max)
col2<-data.frame(x=tem$group,
y=tem$min)
# 绘制背景柱
p1 <- ggplot()+
geom_col(data = col1,
mapping = aes(x = x,y = y),
fill = "#dcdcdc",alpha = 0.6)+
geom_col(data = col2,
mapping = aes(x = x,y = y),
fill = "#dcdcdc",alpha = 0.6)
p1
#把散点火山图叠加到背景柱上:
head(datv)
p2 <- ggplot()+
geom_col(data = col1,
mapping = aes(x = x,y = y),
fill = "#dcdcdc",alpha = 0.6)+
geom_col(data = col2,
mapping = aes(x = x,y = y),
fill = "#dcdcdc",alpha = 0.6)+
geom_jitter(data = datv,
aes(x =group , y = logFC, color =level ),
size = 1,
width =0.4)+
scale_color_manual(name=NULL,
values = c("#4393C3","#FC4E2A","grey40"))+
labs(x="",y="log2(FoldChange)")
#改颜色,第一个是deplete,第二个是enrich,第三个是nosing
p2
# 添加X轴的分组色块标签:
dfcol<-data.frame(x=tem$group,
y=0,
label=tem$group)
# 添加分组色块标签
dfcol$group <- tem$group
# 加载包
library(RColorBrewer)
library(MetBrewer)
# BiocManager::install("MetBrewer")
# 自定义分组色块的颜色
tile_color <- met.brewer("Thomas",length(tem$group))
# 在图中镶嵌色块
p3 <- p2 + geom_tile(data = dfcol,
aes(x=x,y=y),
height=1.75,
color = "black",
fill = tile_color,
alpha = 0.6,
show.legend = F)+
geom_text(data=dfcol,
aes(x=x,y=y,label=group),
size =3.5,
color ="white") + theme_classic()
p3
library(ggrepel)
p4<-p3+geom_text_repel(
data=top,
aes(x=group,y=logFC,label=ID),
force = 1.2,
arrow = arrow(length = unit(0.008, "npc"),
type = "open", ends = "last"))
p4
# 去除背景,美化图片
p5 <- p4+
theme_minimal()+
theme(
axis.title = element_text(size = 18,
color = "black",
face = "bold"),
axis.line.y = element_line(color = "black",
size = 1.2),
axis.line.x = element_blank(),
axis.text.x = element_blank(),
panel.grid = element_blank(),
legend.position = "top",
legend.direction = "vertical",
legend.justification = c(1,0),
legend.text = element_text(size = 12)
)
p5
# return(list(p5,p3,datv,top))
p = p3
p
filename = paste(diffpath.1,"/","Mui.group.volcano.pdf",sep = "")
ggsave(filename,p,width = 12,height = 6,limitsize = FALSE)
相较于之前我们做的火山图,这种综合的火山图以散点的形式出现,并不是v型,但是汇总三个group的图,能够支持组间的对比
之前做的top5微生物的名字以csv的文件出现
本次运行内容结束,如果觉得有用的话,欢迎大家来引用我们的文章:Wen, T., et al., The best practice for microbiome analysis using R. Protein & Cell, 2023. 14(10): p. 713-725.
运行时遇见的一些错误
> source("./function/EdgerSuper2.R")
Error in file(filename, "r", encoding = encoding) :
cannot open the connection
In addition: Warning message:
In file(filename, "r", encoding = encoding) :
cannot open file './function/EdgerSuper2.R': No such file or directory
典型错误,没有改相对路径,用getwd()函数可以看到目前的路径,然后再更改即可
本人的EdgerSuper2.R文件在micro,把function换成micro即可
运行代码时候可能会遇见代码运行正常但是没有出土的情况,再单独运行出土代码会报错
无法代开D:\R\R-4.3.1\library\gtable\R\gtable.rdb这样的错误,这种原因是当前R包版本不适配,跟新R包后解决。
根际互作生物学研究室 简介
根际互作生物学研究室是沈其荣院士土壤微生物与有机肥团队下的一个关注于根际互作的研究小组。本小组由袁军教授带领,主要关注:1.植物和微生物互作在抗病过程中的作用;2 环境微生物大数据整合研究;3 环境代谢组及其与微生物过程研究体系开发和应用。团队在过去三年中在 Nature Communications,ISME J,Microbiome,SCLS,New Phytologist,iMeta,Fundamental Research, PCE,SBB,JAFC(封面),Horticulture Research,SEL(封面),BMC plant biology等期刊上发表了多篇文章。欢迎关注 微生信生物 公众号对本研究小组进行了解。
撰写:文涛 牛国庆 文浩仰 周克成
修改:文涛
排版:杨雯儀
审核:袁军 团队工作及其成果 (点击查看)
了解 交流 合作
小组负责人邮箱 袁军:junyuan@njau.edu.cn;
小组成员文涛:taowen@njau.edu.cn等
团队公众号:微生信生物 添加主编微信,或者后台留言。
1.仅限相关专业或研究方向人员添加,必须实名,不实名则默认忽略。
2.非相关专业的其他人员及推广宣传人员禁止添加。
3.添加主编微信需和简单聊一聊专业相关问题,等待主编判断后,可拉群。
4 微生信生物VIP微信群不受限制,给微生信生物供稿一次即可加入(群里发送推文代码+高效协助解决推文运行等问题+日常问题咨询回复)。
加主编微信 加入群聊
目前营销人员过多,为了维护微生信生物3年来维护的超5500人群聊,目前更新进群要求: