用R绘制弦图

tech2024-08-18  50

方法一: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") # 设定图例

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

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

保存以上图片

使用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()

现在图例和文件不再重叠。有些门的文字重叠。可以在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等其他软件出的例图:

 

方法二:在线绘制

Circos Table Viewer

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

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

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

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

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

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

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

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

最新回复(0)