1.R语言物种组成图,物种堆叠图

本文介绍如何利用R语言处理OTU表和注释表,通过R包如readxl和dplyr对微生物群落数据进行预处理和汇总,最终使用ggplot2绘制反映样本间群落结构差异的物种组成图,展示了从数据处理到可视化的一系列步骤。
摘要由CSDN通过智能技术生成

      我们测16s多样性等会得到细菌群落的OTU表和注释表,这时候难免要比较不同样本的群落结构的差异。这个时候一般看门或者属,种水平一般是达不到的。于是我们需要画物种组成图类似于下面这张(网上下载的,图1)。那我们需要一个OTU表和注释表合并后的表格,我这个实例里叫做“筛选otu注释1.xlsx”(图2),然后根据这个表格利用我们的代码就能顺利出图啦。

              图1                             

                                                                  图2

下面就是R代码,输入文件:筛选otu注释1.xlsx,A1-C9是样本名,需要你自己修改,假如你的样本第一个是Q1,最后一个是M1,代码里的A1:C9也应该全部改成Q1:M1。改成自己的文件时,确保格式和我的例子一样,第一列是OTU名,第二列是注释,后面的列是样本,第一,二列列名也应该一样。

#install.packages("readxl")
library(readxl)
# 替换以下路径为您的Excel文件路径
data <- read_excel("筛选otu注释1.xlsx")

# 假设第二列的列名为 "Column2"
# 下面的代码将 "Column2" 分割成7个新的列
data_separated <- data %>%
  separate(Taxon, into = c("界", "门", "纲", "目", "科", "属", "种"), sep = ";", remove = TRUE, extra = "merge")

library(dplyr)

# 计算每列的总和
column_sums <- data_separated %>%
  summarise(across(A1:C9, sum, na.rm = TRUE))

# 转换为丰度值
data_separated <- data_separated %>%
  mutate(across(A1:C9, ~ .x / column_sums[[cur_column()]]))


data_aggregated <- data_separated %>%
  group_by(门) %>%
  summarise(across(A1:C9, sum, na.rm = TRUE))

library(ggplot2)

# 1. 计算每个门的总丰度
total_abundance_by_Phylum <- data_aggregated %>%
  rowwise() %>%
  mutate(TotalAbundance = sum(c_across(A1:C9), na.rm = TRUE)) %>%
  ungroup()

# 2. 选择除了NA之外的丰度最高的前9个门
top_10_phyla <- total_abundance_by_Phylum %>%
  filter(!is.na(门)) %>%
  arrange(desc(TotalAbundance)) %>%
  slice_head(n = 9) %>%
  pull(门)

# 3. 标记其余的门和NA为 "Others"
data_aggregated <- data_aggregated %>%
  mutate(门 = ifelse(门 %in% top_10_phyla, 门 , "Others"))


data_aggregated <- data_aggregated %>%
  group_by(门) %>%
  summarise(across(A1:C9, sum, na.rm = TRUE))



# 5. 转换数据为长格式并创建堆叠图
data_long <- data_aggregated %>%
  pivot_longer(-门, names_to = "Sample", values_to = "Abundance")

library(viridis)  # 加载viridis包
library(scales) 
# 计算需要的颜色数量
num_colors <- length(unique(data_long$门))

# 生成HSV颜色
hsv_colors <- hsv(h = seq(0, 1, length = num_colors), s = 0.8, v = 0.8)

# 手动指定样本的顺序 调整X轴排序
Phylumed_samples <- c(paste0("A", 1:12), paste0("B", 1:12), paste0("C", 1:12))

# 将样本名转换为因子,并指定水平为我们手动指定的顺序
data_long$Sample <- factor(data_long$Sample, levels = Phylumed_samples)




# 获取门的唯一值并排序
phylum_order <- unique(data_aggregated$门)

# 绘制堆叠图
ggplot(data_long, aes(x = Sample, y = Abundance, fill = 门)) +
  geom_bar(stat = "identity", position = "fill") +
  theme(panel.background = element_blank(),
        axis.line = element_line(),
        axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_manual(values = hsv_colors, breaks = phylum_order) +  # 设置颜色和图例顺序
  scale_y_continuous(expand = expansion(mult=c(0.01,0.01)),labels = scales::label_percent(suffix = "")) +
  labs(x = "Sample", y = "Abundance (%)", fill = "Phylum")

最后我们就可以得到物种组成图啦

关注我,以后的内容更精彩哦。
b站号:羽球最强生信人

闲鱼号:小秋家的小卖铺
淘宝号:小秋家的小卖铺

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OTU(操作分类单元)是对微生物群落中的序列进行聚类和分类的一种方法,常用于分析环境样品中的微生物多样性。在物种组成堆叠柱状中,OTU可以代表不同的微生物分类单元或者谱系单元。 创建OTU物种组成堆叠柱状的步骤与前面提到的类似,但数据整理的过程可能会有所不同。以下是一般步骤: 1. 收集数据:进行微生物样品采集,并进行高通量测序得到原始序列数据。 2. OTU聚类:使用聚类算法(如聚类分析、聚类序列标识、UPGMA等)将原始序列数据聚类成OTU。每个OTU代表一组高度相似的序列,可以视为一个潜在的物种或谱系单元。 3. OTU相对丰度计算:根据每个OTU在样品中的序列数量,计算各个OTU的相对丰度。相对丰度可以表示为百分比或小数形式。 4. 数据整理:将OTU相对丰度数据整理为适合堆叠柱状的格式。确保每个OTU的相对丰度数据都在同一个数据集中。 5. 创建柱状:使用数据可视化工具(如Matplotlib、ggplot2等)创建一个堆叠柱状。每个OTU的相对丰度作为柱子的高度,并为每个OTU堆叠一层。 6. 添加标签和例:为柱状添加适当的轴标签、标题和例。轴标签应说明相对丰度的单位,标题应描述表的目的和样品来源,例应解释每个堆叠部分所代表的OTU。 在OTU物种组成堆叠柱状中,每个堆叠部分代表一个OTU,而非真实物种。这是因为OTU可能与已知物种不完全对应,或者代表未知的微生物谱系单元。 希望这些步骤能够帮助您创建OTU物种组成堆叠柱状!如果您有任何进一步的问题,请随时向我提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值