用R绘制弦图

方法一:R绘制 

# 两个包自己用Rstudio直接安装就好
library(statnet)
library(circlize)

数据导入

# setwd(...)# 自己设定工作环境,随自己喜好
# Rmd无需设置工作目录,默认为文件所有目录
data<-read.csv("SC.csv",header=T,row=1) 
my.data<-as.matrix(data) # 矩阵化
# 手动设置行列名(可选)
rownames(my.data) <-c("CCK", "CNPK", "GCCK", "GCNPK")
colnames(my.data) <-c("Alphaproteobacteria","Betaproteobacteria","Gammaproteobacteria",
                      "Deltaproteobacteria","Acidobacteria","Actinobacteria",
                      "Bacteroidetes","Chloroflexi","Firmicutes",  
                      "Gemmatimonadetes","Planctomycetes","Thaumarchaeota" ,
                      "Verrucomicrobia","Ascomycota",  "Basidiomycota", 
                       "Zygomycota") 
# 行和列的命名,这里本人习惯手动命名,如果觉得麻烦的话也可以直接根据输入的文档中的名字自己编辑好

颜色设定

grid.col = NULL

# 定义处理的颜色,这里随便选取了4个颜色,大家可以根据自己的喜好制定好看的配色
grid.col[c("CCK", "CNPK", "GCCK", "GCNPK")] = c("blue", "black", "orange", "chocolate") 

# 定义微生物各个门的颜色,
grid.col[colnames(my.data)] = c("lavender", "khaki","mistyrose", 
                                "sienna1", "skyblue", "brown1", 
                                "gold", "maroon", "salmon", "moccasin",
                                "wheat","black","green","cyan","pink","orange")

画图

# 参数设置
circos.par(gap.degree = c(rep(2, nrow(my.data)-1), 10, rep(2, ncol(my.data)-1), 10),
           start.degree = 180)

# 出图,本人这里只用了少部分参数,所有参数见此包的help文档,或者看下文
chordDiagram(my.data,
             directional = TRUE,
             diffHeight = 0.06,
             grid.col = grid.col, 
             transparency = 0.5) 

# 图例制作
legend("right",pch=20,legend=colnames(my.data),
       col=grid.col[colnames(my.data)],bty="n",
       cex=1,pt.cex=3,border="black") # 设定图例

初期画出来的图如下,此图类似于柱状图,区域面积越大表示相对丰度越高,上面四个为处理,下面的为微生物各个门的相对丰度:

image

我们目前预览的图看,图例和图区严重重叠。是因为绘图区空间的限制。我们只需在图片输出时调置图片宽大于高即可解决。

保存以上图片

使用pdf函数保存以上图片。

# 设置图片文件名、长宽和字体大小
pdf(file="circlize.pdf", width=8, height=5, pointsize=8)
# 上方绘图和图例代码
chordDiagram(my.data,directional = TRUE,diffHeight = 0.06,grid.col = grid.col, transparency = 0.5) 
legend("right",pch=20,legend=colnames(my.data),col=grid.col[colnames(my.data)],bty="n",cex=1,pt.cex=3,border="black") 
# 绘图结束后写入文件
dev.off()

image

现在图例和文件不再重叠。有些门的文字重叠。可以在AI排版软件中手动调整或删除一些丰度小的类别名称。

Circlize包的所有参数(个性化设置)

大家也可以根据自己的喜好调整,整个图的代码还有好多,大家可以根据自己的喜好调整,circlize包给出的所有参数代码如下:具体使用命令?chordDiagram查看

chordDiagram(x, grid.col = NULL, grid.border = NA, transparency = 0.5,
    col = NULL, row.col = NULL, column.col = NULL,
    order = NULL, directional = 0, xmax = NULL,
    symmetric = FALSE, keep.diagonal = FALSE,
    direction.type = "diffHeight", diffHeight = convert_height(2, "mm"),
    reduce = 1e-5, self.link = 2,
    preAllocateTracks = NULL,
    annotationTrack = c("name", "grid", "axis"),
    annotationTrackHeight = convert_height(c(3, 2), "mm"),
    link.border = NA, link.lwd = par("lwd"), link.lty = par("lty"),
    link.sort = FALSE, link.decreasing = TRUE,
    link.arr.length = ifelse(link.arr.type == "big.arrow", 0.02, 0.4),
    link.arr.width = link.arr.length/2,
    link.arr.type = "triangle", link.arr.lty = par("lty"),
    link.arr.lwd = par("lwd"), link.arr.col = par("col"),
    link.largest.ontop = FALSE, link.visible = TRUE,
    link.rank = NULL, ...)

笔者个性化弦图

大家可以自由发挥根据自己的喜好出图,下面是本人通过个性化代码配合AI等其他软件出的例图:

image

 

方法二:在线绘制

Circos Table Viewer

弦图通常使用Circos软件或者特定的R包绘制,但是这些方法学习成本较高,并不适合初学者快速的进行绘图,本篇文章推荐一个在线的弦图绘制工具Circos Table Viewer,不需要任何基础,只需输入指定格式的文件,就可以一键出图。

进入网站后时一个这样的界面,我们首先要准备好用于绘图的数据文件。

数据文件的格式十分简单,就是一个正常的数据表格,需要指出的是该工具生成图像是会按照物种或样本名称的字母顺序显示,因此,需要将物种和样本的名称按照自己想要展示的顺序手动更改为A-Z的字母,数据的内容可以为抽平后的reads数目,也可以是相对丰度。

数据文件要为制表符分隔的txt格式文件,excel做好之后另存为即可。

行代表样本还是列代表样本都没有关系,只是最终得到的图像样本位于左半边还是右半边的差别。

之后在2A一栏中点击浏览选择绘图数据,之后点击Visualize Table就可以得到绘制出的弦图了。

点击Download即可下载生成的图像。

由于之前将物种和样本的名称设置为了字母,因此需要使用AI、PS或者PPT对名称进行修改,改为其对应的样本和物种名称即可。

<think>好的,我现在需要帮助用户解决如何使用R语言对微生物物种组成数据进行统计分析和可视化的问题。首先,我需要仔细阅读用户提供的引用资料,看看有没有相关的分析方法或工具可以直接应用。 用户提到了对应分析(CA)在群落分析中的应用,特别是χ2距离的使用,这可能涉及到排序方法。引用[3]中提到了使用vegan包进行PERMANOVA分析和Bray-Curtis距离的计算,这可能与Beta多样性分析相关。另外,引用[4]中提到了使用QIIME的脚本进行分类汇总,但用户现在想用R语言处理,所以可能需要找R中类似的包或函数。 接下来,用户需要的是统计分析和可视化。常见的物种组成分析包括Alpha多样性、Beta多样性,以及物种丰度的可视化如堆叠柱状、热等。引用[2]提到堆叠柱状、树等,这些在R中可以用ggplot2或其他形包实现。 首先,数据准备方面,用户的数据应该是一个OTU表格,包含各分类级别的信息。需要导入R,可能使用read.table或read.csv。然后数据预处理,可能需要过滤低丰度物种,计算相对丰度,这可以用dplyr或vegan包中的函数处理。 对于统计分析,引用[3]中的PERMANOVA可以用vegan的adonis函数来做群落差异分析。而Alpha多样性可能需要计算香农指数等,可以用vegan的diversity函数。分类单元差异分析可能用DESeq2或edgeR,但微生物数据通常是组成型数据,可能需要适当的标准化方法。 可视化部分,堆叠柱状可以用ggplot2的geom_bar实现,分面功能可以按样本分组展示。热可以用pheatmap或ComplexHeatmap包。排序如PCA或NMDS可以用vegan生成,再用ggplot2绘。网络可能需要igraph或ggraph,可以用circlize包。 另外,用户可能还需要进行分类学汇总,类似QIIME的summarize_taxa.py,这在R中可以用dplyr的group_by和summarise函数来实现,按不同分类级别汇总丰度。 需要注意的问题包括数据的预处理步骤是否正确,比如过滤和标准化,以及选择合适的统计方法。例如,Bray-Curtis距离适用于群落数据,而PERMANOVA需要考虑数据的异质性。可视化时要考虑颜色搭配和分类过多时的可读性问题,可能需要合并低丰度物种为“Others”。 用户可能的深层需求是希望有一个完整的分析流程,从数据导入到统计分析和可视化,每一步的具体代码和解释。需要确保代码示例正确,并引用相关的包和函数,比如vegan、phyloseq、ggplot2等。同时,可能需要解释每个步骤的目的,比如为什么进行相对丰度转换,如何解释排序的结果等。 最后,生成相关问题需要考虑用户可能的后续步骤,比如更复杂的分析、其他可视化方法或结果解读问题,确保覆盖用户可能遇到的下一步问题。</think>以下是用R语言进行微生物群落组成数据统计分析与可视化的分步指南: ### 一、数据准备与预处理 1. **数据导入** ```r # 读取OTU表格(示例为制表符分隔文件) otu_table <- read.delim("otu_table.txt", row.names=1, check.names=F) # 读取分类信息(七级分类) taxonomy <- read.delim("taxonomy.txt", sep="\t", stringsAsFactors=F) ``` 2. **数据清洗** ```r library(dplyr) # 过滤低丰度物种(保留总丰度>0.1%的物种) filtered_otu <- otu_table %>% mutate(Total = rowSums(.)) %>% filter(Total > sum(Total)*0.001) %>% select(-Total) ``` ### 二、基础统计分析 1. **分类单元汇总** ```r # 按门水平汇总(Phylum) phylum_sum <- aggregate(t(filtered_otu), by=list(taxonomy$Phylum), FUN=sum) ``` 2. **Alpha多样性分析** ```r library(vegan) shannon_index <- diversity(t(filtered_otu), index="shannon") ``` 3. **Beta多样性分析** ```r # 计算Bray-Curtis距离 bray_dist <- vegdist(t(filtered_otu), method="bray") # PERMANOVA分析(需提供分组变量) adonis_result <- adonis2(bray_dist ~ group_factor, data=metadata) ``` ### 三、可视化实现 1. **堆叠柱状(门水平)** ```r library(ggplot2) library(reshape2) melted_data <- melt(phylum_sum, id.vars="Group.1") ggplot(melted_data, aes(x=variable, y=value, fill=Group.1)) + geom_bar(stat="identity") + labs(x="Sample", y="Relative Abundance", fill="Phylum") + theme(axis.text.x = element_text(angle=45, hjust=1)) ``` 2. **热可视化(属水平)** ```r library(pheatmap) pheatmap(log10(filtered_otu+1), clustering_method="ward.D2", show_rownames=FALSE) ``` 3. **排序分析(PCA)** ```r library(phyloseq) pca_result <- ordinate(physeq_obj, "PCA") plot_ordination(physeq_obj, pca_result, color="Group") + stat_ellipse(level=0.95) ``` ### 四、高级分析 1. **差异物种分析** ```r library(DESeq2) dds <- DESeqDataSetFromMatrix(countData = round(filtered_otu), colData = metadata, design = ~ Group) dds <- DESeq(dds) res <- results(dds) ``` 2. **网络分析** ```r library(SpiecEasi) se.mb <- spiec.easi(t(filtered_otu), method='mb') plot(adj2igraph(se.mb$refit), vertex.size=3) ``` ### 五、注意事项 1. 建议使用`phyloseq`包整合OTU表、分类信息和样本元数据 2. 相对丰度标准化推荐使用CSS标准化(metagenomeSeq包)[^3] 3. 可视化配色建议采用ColorBrewer的Set3或Paired色系 4. 处理高维数据时建议使用`ampvis2`或`microbiome`等专用包 相关问题
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值