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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      我们测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站号:羽球最强生信人

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值