基于R做宏基因组进化树+丰度柱状图TreeBar带聚类树的堆叠柱形图

news2024/12/23 21:02:14

写在前面

同之前一样,重分析需要所以自己找了各路代码借鉴学习,详情请参考 R语言绘制带聚类树的堆叠柱形图 , 实操效果如下:

image-20230917151814185

步骤

表格预处理

  • 选取不同样本属水平的物种丰度图(绝对和相对水平都可以,相对画出来是齐的,绝对的bar是不齐的)。Top10丰度外的类群合并为Others。这里注意,用本篇代码时,表格选择csv/txt等格式文件一定要是制表符分隔的,不然会报错重复名或者没有多出的行

image-20230917152142907

  • 分组信息

image-20230917152559876

代码演示

# 装包
install.packages("vegan")

#层次聚类
#读取 OTU 丰度表,csv/txt等文件一定要是制表符分隔的,不然会报错重复名或者没有多出的行
dat <- read.delim('Unigenes.absolute.g.txt', row.names = 1, sep = '\t', head = TRUE, check.names = FALSE)

#计算样本间距离,以群落分析中常用的 Bray-curtis 距离为例
dis_bray <- vegan::vegdist(t(dat), method = 'bray')

#层次聚类,以 UPGMA 为例
tree <- hclust(dis_bray, method = 'average')
tree

plot(tree)

##聚类树绘制
#样本分组颜色、名称等
group <- read.delim('group.txt', row.names = 1, sep = '\t', head = TRUE, check.names = FALSE, stringsAsFactors = FALSE)
grp <- group[2]
group_col <- c('red', 'blue')
names(group_col) <- c('1', '2')
group_name <- c('RA', 'CON')

#样本分组标签
layout(t(c(1, 2, 2, 2, 3)))
par(mar = c(5, 2, 5, 0))

plot(0, type = 'n', xaxt = 'n', yaxt = 'n', frame.plot = FALSE, xlab = '', ylab = '',
     xlim = c(-max(tree$height), 0), ylim = c(0, length(tree$order)))
legend('topleft', legend = group_name, pch = 15, col = group_col, bty = 'n', cex = 1)

#聚类树绘制,按分组给分支上色
treeline <- function(pos1, pos2, height, col1, col2) {
  meanpos = (pos1[1] + pos2[1]) / 2
  segments(y0 = pos1[1] - 0.4, x0 = -pos1[2], y1 = pos1[1] - 0.4, x1 = -height,  col = col1,lwd = 2)
  segments(y0 = pos1[1] - 0.4, x0 = -height,  y1 = meanpos - 0.4, x1 = -height,  col = col1,lwd = 2)
  segments(y0 = meanpos - 0.4, x0 = -height,  y1 = pos2[1] - 0.4, x1 = -height,  col = col2,lwd = 2)
  segments(y0 = pos2[1] - 0.4, x0 = -height,  y1 = pos2[1] - 0.4, x1 = -pos2[2], col = col2,lwd = 2)
}

meanpos = matrix(rep(0, 2 * length(tree$order)), ncol = 2)
meancol = rep(0, length(tree$order))
for (step in 1:nrow(tree$merge)) {
  if(tree$merge[step, 1] < 0){
    pos1 <- c(which(tree$order == -tree$merge[step, 1]), 0)
    col1 <- group_col[as.character(grp[tree$labels[-tree$merge[step, 1]],1])]
  } else {
    pos1 <- meanpos[tree$merge[step, 1], ]
    col1 <- meancol[tree$merge[step, 1]]
  }
  if (tree$merge[step, 2] < 0) {
    pos2 <- c(which(tree$order == -tree$merge[step, 2]), 0)
    col2 <- group_col[as.character(grp[tree$labels[-tree$merge[step, 2]],1])]
  } else {
    pos2 <- meanpos[tree$merge[step, 2], ]
    col2 <- meancol[tree$merge[step, 2]]
  }
  height <- tree$height[step]
  treeline(pos1, pos2, height, col1, col2)
  meanpos[step, ] <- c((pos1[1] + pos2[1]) / 2, height)
  if (col1 == col2) meancol[step] <- col1 else meancol[step] <- 'grey'
}

##堆叠柱形图
#样本顺序调整为和聚类树中的顺序一致
dat <- dat[ ,tree$order]

#物种颜色设置
genus_color <- c('#8DD3C7', '#FFFFB3', '#00CDCD', '#FB8072', '#80B1D3', '#FDB462', '#B3DE69', '#FCCDE5', '#BC80BD', '#CCEBC5', 'gray')
names(genus_color) <- rownames(dat)

#堆叠柱形图
#数字向量,格式为c(bottom, left, top, right),给出各个方向绘图区边缘空白的大小
par(mar = c(5, 3, 5, 0))

relative <- read.delim('new_Unigenes.relative.g.txt', row.names = 1, sep = '\t', head = TRUE, check.names = FALSE)

bar <- barplot(as.matrix(relative), col = genus_color, space = 0.4, width = 0.7, cex.axis = 1, horiz = TRUE, cex.lab = 1.2,
               xlab = 'Relative Abundance', yaxt = 'n', las = 1, ylim = c(0, ncol(dat)), family = 'mono')

mtext('Top 10 genus', side = 3, line = 1, cex = 1)
text(x = -0.05, y = bar, labels = colnames(dat), col = group_col[group[tree$order, 2]], xpd = TRUE)

#柱形图图例
par(mar = c(5, 1, 5, 0))
plot(0, type = 'n', xaxt = 'n', yaxt = 'n', bty = 'n', xlab = '', ylab = '')
legend('left', pch = 15, col = genus_color, legend = names(genus_color), bty = 'n', cex = 1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1045736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring实现简单的Bean容器

1.BeanDefinition&#xff0c;用于定义 Bean 实例化信息&#xff0c;现在的实现是以一个 Object 存放对象 public class BeanDefinition {/*** bean对象*/private Object bean;/*** 存放 &#xff08;定义&#xff09;Bean 对象*/public BeanDefinition(Object bean) {this.bea…

RFID用于仓库盘点,省时省力

RFID用于仓库盘点&#xff0c;省时省力 RFID技术已经被广泛应用在工业制造和日常生活当中。它使用射频信号来识别和跟踪标签中的信息。RFID系统由两个主要组件组成&#xff1a;RFID标签和RFID读写器。RFID标签通常由一个芯片和一个天线组成。标签内的芯片存储着特定的数据&…

监控员工聊天记录违法吗?监控员工聊天记录软件

在现代社会&#xff0c;企业面临着如何确保员工工作效率和质量的挑战。为了解决这一问题&#xff0c;一些企业选择监控员工的聊天记录&#xff0c;以确保他们遵守公司规定&#xff0c;不泄露敏感信息&#xff0c;以及避免工作效率低下。然而&#xff0c;这种做法是否合法呢&…

阿里巴巴K8S集成seata

正文 在K8S集成seata&#xff0c;官方配置 代码 apiVersion: v1 kind: Service metadata:name: seata-servernamespace: wmz-devlabels:k8s-app: seata-server spec:type: NodePortports:- port: 8091nodePort: 30091protocol: TCPname: httpselector:k8s-app: seata-server-…

适合中小企业的推荐佳企业备份软件

企业环境通常比单个工作站拥有更多的机器、更多的数据和更多的人员&#xff0c;这些可能会带来更多的潜在风险——96%的企业经历过至少一种数据丢失的主要原因&#xff1a;人为错误、系统崩溃、硬件故障、病毒袭击、停电、火灾和自然灾害。 数据丢失对企业造成的损害不仅在…

Rhino犀牛技巧[导出DXF给AD]

导出DXF给AD 按照默认的方式导出,在AD会缺失线: 导出的事后选择"2004 直线" 这时候AD导出的线就没有缺失的了:

AI在小分子领域应用

5 小分子应用的AI 在化学中&#xff0c;小分子指的是相对分子量较低的有机化合物。它通常由少量原子组成&#xff0c;通常少于100个&#xff0c;并具有明确定义的化学结构。小分子与大分子相对比&#xff0c;大分子如蛋白质、核酸和聚合物在大小上要大得多&#xff0c;通常具有…

React脚手架-详细解析目录与运行

分析执行流程就是&#xff1a;导库 -> 页面节点 -> 组件 -> 组件挂载页面 这里面核心就是 页面节点index.html 、 组件挂载页面 index.js 、 组件render App.js index.css 是对页面的渲染&#xff08;通用型样式&#xff09; 、App.css 是对组件的渲染 首先就是执…

【51单片机】9-定时器和计数器

1.定时器的介绍 1.什么是定时器 &#xff08;1&#xff09;SoC的一种内部的外设【在单片机里面&#xff0c;但是在CPU外面】 &#xff08;2&#xff09;定时器就是CPU的”闹钟“ 2.什么是计数器 &#xff08;1&#xff09;定时器就是用计数的原始实现的 &#xff08;2&#xf…

PyCharm中使用pyqt5的方法2-2

1.2 是否下载成功 按照以上步骤安装了“pyqt5”、“pyqt5-tools”模块和“pyqt5designer”模块后&#xff0c;可以打开保存这三个模块的路径&#xff0c;找到其对应的文件夹&#xff0c;即可验证是否下载成功。 获取PyCharm保存下载模块路径的方法是&#xff0c;在PyCharm界面…

Blender 之创建一个简单的笔筒

文章目录 成品图实现步骤 你是不是想创建一个笔筒捏&#xff1f; follow me! 成品图 实现步骤 先添加一个柱体 选中柱体&#xff0c;然后按tab 进入编辑模式 切换到面模式 &#xff08;可以按主键盘的 3 键&#xff09; 分别选中上下面&#xff0c;鼠标右键&#xff0c;选…

风力发电一键求助可视对讲终端

SV-11SV 风力发电一键求助可视对讲终端 SIP可视对讲终端SV-11SV是专门针对行业用户需求研发的一款高性价比SIP可视对讲产品&#xff0c;外观精致&#xff0c;功能强大&#xff0c;集智能安防、音/视频对讲和广播功能于一体&#xff0c;性价比高。支持壁挂式安装方式。防护等级满…

安达发|在国外APS自动排程软件案例比比皆是

在国外&#xff0c;APS&#xff08;自动排程系统&#xff09;的应用已经非常普遍&#xff0c;它们在各个领域都取得了显著的成果。本文将为您详细介绍国外APS自动排程的案例&#xff0c;以及它们在实际生产中的价值和意义。 1. 制造业 在制造业领域&#xff0c;APS自动排程系统…

JDK下载安装配置教材

1.JDK下载 目前市面上的公司大多数采用的是jdk8进行开发 &#xff0c;所以本文就以jdk8的下载安装配置为例来讲解。 因为Oracle的官网地址访问网速比较慢&#xff0c;所以下载速度较慢&#xff0c;本文我演示的是jdk8的下载&#xff0c;如果需要下载jdk8的小伙伴可以直接在我…

26047-2022 一次柱式锂电池绝缘子 思维导图

声明 本文是学习GB-T 26047-2022 一次柱式锂电池绝缘子. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了一次柱式锂电池绝缘子产品的分类和标记、技术要求、试验方法、检验规则、标志、包 装、运输、贮存和随行文件及订货单内容…

【JVM】第四篇 垃圾收集器ParNewCMS底层三色标记算法详解

导航 一. 垃圾收集算法详解1. 分代收集算法2. 标记-复制算法3. 标记-清除算法4. 标记-整理算法二. 垃圾收集器详解1. Serial收集器2. Parallel Scavenge收集器3. ParNew收集器4. CMS收集器三. 垃圾收集底层三色标记算法实现原理1. 垃圾收集底层使用三色标记算法的原因?2. 垃圾…

C++ - set 和 map 的实现(下篇)- set 和 map 的迭代器实现

前言 在上篇当中我们为了 让红黑树适用于 set 和 map 对红黑树进行了修改&#xff0c;还是实现了红黑树的迭代器&#xff0c;因为 set 和 map 的底层都是使用 红黑树&#xff0c;那么&#xff0c;set 和 map 的迭代器也就实现了。具体可以看本博客的上篇&#xff1a;C - map 和…

Windows提权辅助工具WES-NG使用

Windows提权辅助工具WES-NG使用 1.下载安装2.开始使用1.下载安装 WES-NG 执行此命令更新CVE数据库: python wes.py --update2.开始使用 首先,生成系统systeminfo信息,并重定向一个txt文件中: systeminfo > systeminfo.txt查找提权可以利用的CVE: python wes.py s…

还不知道数据类岗位的相关技能和职责吗?涤生大数据告诉你(二)

续接上文&#xff1a;还不知道数据类岗位的相关技能和职责吗&#xff1f;涤生大数据告诉你&#xff08;一&#xff09; 1.数据治理工程师 工作职责 数据治理工程师的工作职责主要包括以下几个方面&#xff1a; 1. 数据管理策略制定&#xff1a;制定和实施数据管理策略&#…

【HCIE】VXLAN

VXLAN简介 介绍VXLAN的定义、目的和收益。 定义 RFC7348定义了VLAN扩展方案VXLAN&#xff08;Virtual eXtensible Local Area Network&#xff09;。VXLAN采用MAC in UDP&#xff08;User Datagram Protocol&#xff09;封装方式&#xff0c;是NVO3&#xff08;Network Virt…