setwd("E:\\中国农业科学院\\20220927宏基因组教学\\02后期分析\\01堆叠图")
rm(list = ls())
library(tidyverse)
library(ggplot2)
library(ggtree)
library(treeio)
library(ggsci)
library(cowplot)
otu = read.table('top10.2.txt', row.names = 1, sep = '\t', head = TRUE, check.names = FALSE)
tree = hclust(vegan::vegdist(t(otu), method = 'bray'),
method = 'average') %>%
as.phylo()
tree = groupClade(tree, .node=c(41))
p1 = ggtree(tree,branch.length="none") + geom_tiplab(color="black",size=3) + xlim(NA, 70)
p1
otu$mean = apply(otu, 1, mean)
otu = otu[order(otu$mean),]
otu$phylum = factor(rownames(otu), levels = rownames(otu))
otu = otu[, -c(ncol(otu)-1)]
p2 = otu %>%
reshape2::melt(id.vars = 'phylum') %>%
ggplot(aes(variable, value, fill = phylum))+
geom_bar(stat = 'identity', position = 'fill', colour= "black",size=.3)+
scale_x_discrete(limits = c("RE185","SE185","SE339","SE54","SE455","GE331","GE533","GE455","GE165","GE185","GE200","SE200","GE339","GE54","RE455","RE533","RE54","SE533","SE165","SE331","BS200","RS200","RE331","RS339","RS54","BS165","RS185","RE200","BS54","RE165","BS533","RE339","BS331","BS185","RS331","RS455","BS339","BS455","RS165","RS533"))+
scale_fill_igv()+
scale_fill_manual(values = c("#A6CEE3","#FFFF99","#B2DF8A","#33A02C","#B15928","#E31A1C","#FDBF6F","#FF7F00","#6A3D9A","#1F78B4","#FB9A99")) +
scale_y_continuous(expand = c(0,0))+
scale_y_continuous(labels = scales::percent)+
coord_flip()+
theme_classic()+
theme(axis.ticks.y = element_blank(),
axis.title.y = element_blank(),
axis.text.y = element_blank(),
axis.line = element_blank())+
labs(y = 'Percentage')
ggdraw()+
draw_plot(p1, 0, 0.055, 0.8, 0.945)+
draw_plot(p2, 0.25, 0, 0.7, 1)
#################################################################################################
这段R语言代码的功能是生成一个堆叠图(stacked plot)用于展示OTU(Operational Taxonomic Units)在不同分类水平上的相对丰度,并结合一个聚类树(cluster tree)进行可视化。
下面是代码的解释:
-
设置工作目录和清空变量:
setwd("E:\\中国农业科学院\\20220927宏基因组教学\\02后期分析\\01堆叠图")
:设置工作目录为指定路径。rm(list = ls())
:清空当前环境中的所有变量。
-
载入所需的R包:
library(tidyverse)
:加载Tidyverse包,包含了多个常用的数据处理和可视化包。library(ggplot2)
:加载ggplot2包,用于创建图形。library(ggtree)
:加载ggtree包,用于创建聚类树的可视化。library(treeio)
:加载treeio包,用于读取和处理聚类树数据。library(ggsci)
:加载ggsci包,用于设置颜色主题。library(cowplot)
:加载cowplot包,用于组合多个图形。
-
读取数据:
otu = read.table('top10.2.txt', row.names = 1, sep = '\t', head = TRUE, check.names = FALSE)
:从名为top10.2.txt
的文件中读取OTU数据,使用第一列作为行名,以制表符分隔,文件包含列名。
-
构建聚类树:
tree = hclust(vegan::vegdist(t(otu), method = 'bray'), method = 'average') %>% as.phylo()
:使用OTU数据计算Bray-Curtis距离并进行聚类分析,得到聚类树对象。
-
对聚类树进行分组:
tree = groupClade(tree, .node=c(41))
:将聚类树的节点41进行分组。
-
创建第一个图形p1(聚类树):
p1 = ggtree(tree,branch.length="none") + geom_tiplab(color="black",size=3) + xlim(NA, 70)
:使用ggtree包绘制聚类树,禁用分支长度显示,设置叶节点标签颜色为黑色、大小为3,设置x轴范围为自动缩放。
-
对OTU数据进行处理:
otu$mean = apply(otu, 1, mean)
:计算OTU各行的平均值,并将结果保存在新列"mean"中。otu = otu[order(otu$mean),]
:按照平均值对OTU数据进行升序排序。otu$phylum = factor(rownames(otu), levels = rownames(otu))
:将OTU数据的行名设置为因子变量"phylum",以保持排序顺序。otu = otu[, -c(ncol(otu)-1)]
:删除倒数第二列(平均值所在列)。
-
创建第二个图形p2(堆叠图):
p2 = otu %>% reshape2::melt(id.vars = 'phylum') %>% ggplot(aes(variable, value, fill = phylum)) + ...
:使用reshape2包将OTU数据进行重塑,以便于堆叠图的绘制。设置x轴为变量,y轴为值,颜色填充为"phylum"因子。接下来是一系列设置图形样式和主题的代码。
-
组合图形并绘制:
ggdraw() + draw_plot(p1, 0, 0.055, 0.8, 0.945) + draw_plot(p2, 0.25, 0, 0.7, 1)
:使用cowplot包中的函数将图形p1和p2组合在一起,并设置它们的位置和大小。
最后,代码生成了一个堆叠图和聚类树的组合图形,用于展示OTU的相对丰度和它们在分类水平上的关系。
################################################################################################
逐行解释您提供的R代码:
-
设置工作目录:
setwd("D:\\Desktop")
:将工作目录设置为 "D:\Desktop"。这将是R语言执行文件读取和写入操作的默认位置。
-
清空变量:
rm(list = ls())
:清空当前R环境中的所有对象,以确保开始时没有任何变量存在。
-
载入包:
library(tidyverse)
:加载tidyverse包,该包提供了一套用于数据处理和可视化的R包。library(ggplot2)
:加载ggplot2包,该包用于绘制数据图形。library(ggtree)
:加载ggtree包,该包用于绘制漂亮的进化树。library(treeio)
:加载treeio包,该包用于处理和操作进化树。library(ggsci)
:加载ggsci包,该包提供了一套科学颜色主题。library(cowplot)
:加载cowplot包,该包用于组合多个图形。
-
读取数据:
otu = read.table('top10.2.txt', row.names = 1, sep = '\t', head = TRUE, check.names = FALSE)
:从'top10.2.txt'文件中读取数据,并将第一列作为行名。文件使用制表符作为列分隔符。
-
构建聚类树:
tree = hclust(vegan::vegdist(t(otu), method = 'bray'), method = 'average') %>% as.phylo()
:根据OTU数据计算样本间的Bray-Curtis距离,然后使用聚类方法构建聚类树。最后,将结果转换为phylo对象。
-
对聚类树进行分组:
tree = groupClade(tree, .node=c(41))
:在聚类树中根据给定的节点(41号节点)进行分组。
-
绘制第一个图形p1(聚类树):
p1 = ggtree(tree, branch.length = "none") + geom_tiplab(color = "black", size = 3) + xlim(NA, 70)
:使用ggtree包绘制聚类树。设置分支长度为"none",给叶节点添加标签,并设置标签颜色为黑色、大小为3。同时,限制x轴范围在0到70之间。
-
数据处理和绘制第二个图形p2(堆叠图):
otu$mean = apply(otu, 1, mean)
:计算每行数据的平均值,并将结果存储在新的列"mean"中。otu = otu[order(otu$mean),]
:按照平均值的升序对数据进行排序。otu$phylum = factor(rownames(otu), levels = rownames(otu))
:将行名作为新的列"phylum",并将其设置为有序因子,按照原始数据的行顺序设置水平顺序。otu = otu[, -c(ncol(otu)-1)]
:移除倒数第二列。
-
使用ggplot2绘制堆叠图:
p2 = otu %>% reshape2::melt(id.vars = 'phylum') %>% ggplot(aes(variable, value, fill = phylum)) + geom_bar(stat = 'identity', position = 'fill', colour= "black", size = .3)
:使用reshape2包的melt函数将OTU数据转换为长格式,并利用ggplot2包绘制堆叠柱状图。设置x轴为变量名,y轴为数值,堆叠填充颜色按照"phylum"列进行分组。scale_x_discrete(limits = c(...))
:设置x轴的离散值限制,按照指定顺序显示。scale_fill_igv()
:使用ggsci包中的配色方案设置填充颜色。scale_fill_manual(values = c(...))
:手动设置填充颜色的值。scale_y_continuous(expand = c(0,0))
:设置y轴的连续值范围,去除空白。scale_y_continuous(labels = scales::percent)
:将y轴刻度标签转换为百分比格式。coord_flip()
:交换x轴和y轴的位置,使图形为横向堆叠柱状图。theme_classic()
:使用经典主题样式。theme(...)
:对图形的轴线、刻度、文本等进行自定义的主题设置。labs(y = 'Percentage')
:设置y轴标签为"Percentage"。
-
组合图形并输出:
ggdraw() + draw_plot(p1, 0, 0.055, 0.8, 0.945) + draw_plot(p2, 0.25, 0, 0.7, 1)
:使用cowplot包的ggdraw函数创建画布,并利用draw_plot函数将p1和p2两个图形绘制在画布上的指定位置。最后,输出组合图形。
这段代码的目的是读取OTU数据,构建聚类树并绘制聚类树图形,然后对OTU数据进行处理并绘制堆叠图,最后将聚类树图形和堆叠图形组合在一起输出。