首页 > 其他分享 >R : 生成一个堆叠图用于展示OTU在不同分类水平上的相对丰度,并结合一个聚类树进行可视化

R : 生成一个堆叠图用于展示OTU在不同分类水平上的相对丰度,并结合一个聚类树进行可视化

时间:2023-05-24 21:11:56浏览次数:30  
标签:library otu 堆叠 可视化 聚类 图形 OTU

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)进行可视化。

下面是代码的解释:

  1. 设置工作目录和清空变量:

    • setwd("E:\\中国农业科学院\\20220927宏基因组教学\\02后期分析\\01堆叠图"):设置工作目录为指定路径。
    • rm(list = ls()):清空当前环境中的所有变量。
  2. 载入所需的R包:

    • library(tidyverse):加载Tidyverse包,包含了多个常用的数据处理和可视化包。
    • library(ggplot2):加载ggplot2包,用于创建图形。
    • library(ggtree):加载ggtree包,用于创建聚类树的可视化。
    • library(treeio):加载treeio包,用于读取和处理聚类树数据。
    • library(ggsci):加载ggsci包,用于设置颜色主题。
    • library(cowplot):加载cowplot包,用于组合多个图形。
  3. 读取数据:

    • otu = read.table('top10.2.txt', row.names = 1, sep = '\t', head = TRUE, check.names = FALSE):从名为top10.2.txt的文件中读取OTU数据,使用第一列作为行名,以制表符分隔,文件包含列名。
  4. 构建聚类树:

    • tree = hclust(vegan::vegdist(t(otu), method = 'bray'), method = 'average') %>% as.phylo():使用OTU数据计算Bray-Curtis距离并进行聚类分析,得到聚类树对象。
  5. 对聚类树进行分组:

    • tree = groupClade(tree, .node=c(41)):将聚类树的节点41进行分组。
  6. 创建第一个图形p1(聚类树):

    • p1 = ggtree(tree,branch.length="none") + geom_tiplab(color="black",size=3) + xlim(NA, 70):使用ggtree包绘制聚类树,禁用分支长度显示,设置叶节点标签颜色为黑色、大小为3,设置x轴范围为自动缩放。
  7. 对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)]:删除倒数第二列(平均值所在列)。
  8. 创建第二个图形p2(堆叠图):

    • p2 = otu %>% reshape2::melt(id.vars = 'phylum') %>% ggplot(aes(variable, value, fill = phylum)) + ...:使用reshape2包将OTU数据进行重塑,以便于堆叠图的绘制。设置x轴为变量,y轴为值,颜色填充为"phylum"因子。接下来是一系列设置图形样式和主题的代码。
  9. 组合图形并绘制:

    • 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代码:

  1. 设置工作目录:

    • setwd("D:\\Desktop"):将工作目录设置为 "D:\Desktop"。这将是R语言执行文件读取和写入操作的默认位置。
  2. 清空变量:

    • rm(list = ls()):清空当前R环境中的所有对象,以确保开始时没有任何变量存在。
  3. 载入包:

    • library(tidyverse):加载tidyverse包,该包提供了一套用于数据处理和可视化的R包。
    • library(ggplot2):加载ggplot2包,该包用于绘制数据图形。
    • library(ggtree):加载ggtree包,该包用于绘制漂亮的进化树。
    • library(treeio):加载treeio包,该包用于处理和操作进化树。
    • library(ggsci):加载ggsci包,该包提供了一套科学颜色主题。
    • library(cowplot):加载cowplot包,该包用于组合多个图形。
  4. 读取数据:

    • otu = read.table('top10.2.txt', row.names = 1, sep = '\t', head = TRUE, check.names = FALSE):从'top10.2.txt'文件中读取数据,并将第一列作为行名。文件使用制表符作为列分隔符。
  5. 构建聚类树:

    • tree = hclust(vegan::vegdist(t(otu), method = 'bray'), method = 'average') %>% as.phylo():根据OTU数据计算样本间的Bray-Curtis距离,然后使用聚类方法构建聚类树。最后,将结果转换为phylo对象。
  6. 对聚类树进行分组:

    • tree = groupClade(tree, .node=c(41)):在聚类树中根据给定的节点(41号节点)进行分组。
  7. 绘制第一个图形p1(聚类树):

    • p1 = ggtree(tree, branch.length = "none") + geom_tiplab(color = "black", size = 3) + xlim(NA, 70):使用ggtree包绘制聚类树。设置分支长度为"none",给叶节点添加标签,并设置标签颜色为黑色、大小为3。同时,限制x轴范围在0到70之间。
  8. 数据处理和绘制第二个图形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)]:移除倒数第二列。
  9. 使用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"。
  10. 组合图形并输出:

    • 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数据进行处理并绘制堆叠图,最后将聚类树图形和堆叠图形组合在一起输出。

标签:library,otu,堆叠,可视化,聚类,图形,OTU
From: https://www.cnblogs.com/wzbzk/p/17429530.html

相关文章

  • web组态可视化编辑器
    随着工业智能制造的发展,工业企业对设备可视化、远程运维的需求日趋强烈,传统的单机版组态软件已经不能满足越来越复杂的控制需求,那么实现web组态可视化界面成为了主要的技术路径。  行业痛点对于软件服务商来说,将单机版软件转变为网页版软件已经到了势在必行的阶段。但是,转......
  • Nginx 可视化神器!复杂配置一键生成,监控管理一条龙!
    功能说明nginxWebUI是一款图形化管理nginx配置的工具,可以使用网页来快速配置nginx的各项功能,包括http协议转发、tcp协议转发、反向代理、负载均衡、静态html服务器、ssl证书自动申请、续签、配置等。配置好后可一建生成nginx.conf文件,同时可控制nginx使用此文件进行启动与重载,完成......
  • R语言门限误差修正模型(TVECM)参数估计沪深300指数和股指期货指数可视化
    全文链接:http://tecdat.cn/?p=32511原文出处:拓端数据部落公众号时间序列模型的理论已经非常丰富,模型的应用也相当广泛。但现实生活中,越来越多的时间序列模型呈现出了非线性的特点,因此,研究非线性时间序列模型的理论及对其参数进行估计有着极其重要的意义。门限模型作为非线性......
  • 痞子衡嵌入式:MCUBootUtility v5.0发布,初步支持i.MXRT1180
    --痞子衡维护的NXP-MCUBootUtility工具距离上一个大版本(v4.0.0)发布过去4个多月了,期间痞子衡也做过两个小版本更新,但不足以单独介绍。这一次痞子衡为大家带来了全新大版本v5.0.0,这次更新主要是想和大家特别聊聊恩智浦新一代i.MXRT旗舰RT1180。一、v4.1-v5.0更新记录-......
  • Python竖版大屏 | 用pyecharts开发可视化的奇妙探索!
    你好!我是@马哥python说,一枚10年程序猿......
  • MyBatis-Plus 可视化代码生成器来啦,让你的开发效率大大提速!!
    前言在基于Mybatis的开发模式中,很多开发者还会选择Mybatis-Plus来辅助功能开发,以此提高开发的效率。虽然Mybatis也有代码生成的工具,但Mybatis-Plus由于在Mybatis基础上做了一些调整,因此,常规的生成工具生成的代码还有一些不太符合预期。而且对于多数据库的支持不是很好。因此,我们......
  • 点云标可视化+标注软件
    qt_visualizer简介代码借鉴的pcl官网tutorials。visualizer模块的API见:这里实现点云的标注功能,调用的的pcl中的这个函数boost::signals2::connection registerAreaPickingCallback(void(*callback)(constpcl::visualization::AreaPickingEvent&,void*),void*cookie=nullptr......
  • Python爬虫以及数据可视化分析之某站热搜排行榜信息爬取分析
    目录前言一,确定目标二,发送请求三,解析数据四,保存数据pyecharts进行可视化“某站”数据排名前10视频类型“某站”标题标签可视化“某站”喜欢视频分类概况总结前言本项目将会对“某站”热搜排行的数据进行网页信息爬取以及数据可视化分析本教程仅供学习参考!首先,准备好相关库requ......
  • 皕杰报表+DataEase,中式复杂报表与数据可视化的完美组合
    在商业智能解决方案中,数据的展现及业务规律的呈现是商业智能中极其重要的组成部分。长久以来,由于数据源复杂多样性,以及中国传统文化的对于数据表格的工整、对称等等的影响下,报表工具一直担当着商业智能的数据展现中主角的位置;最近随着显示屏技术的发展、大屏价格的下调,数据大屏及数......
  • Python数据可视化小结
    1.引言原始形式的数据对大多数人来说可能都是枯燥乏味的,但是如果掌握正确的可视化工具,给人的印象就会变得引人入胜。本文通过实际例子,让我们利用数据可视化工具来探索不一样的数据体验。闲话少说,我们直接开始吧!2.举个栗子让我们从创建一个数据集开始,假设以下数据集包含2010-2020......