引言
????上一期內(nèi)容我們介紹了基于R語言使用熱圖(Heatmap)對微生物豐度進行展示,今天這期內(nèi)容主要介紹如何使用弦圖(Chord Diagram)來展示物種豐度的計算結(jié)果!
正文——代碼
1、工作目錄設(shè)置及R包的加載
rm(list=ls())
setwd("D:\\桌面\\SCI論文寫作與繪圖物種豐度計算及可視化")
#安裝、加載包
install.packages("circlize")
install.packages("statnet")
library(circlize)
library(statnet)
2、加載數(shù)據(jù)并對其進行處理
#準(zhǔn)備數(shù)據(jù)(此前計算豐度生成的數(shù)據(jù))
data <- read.table("Genus_x.txt",sep="\t",header = T,row.names = 1,check.names = F)
data <- as.matrix(m)#轉(zhuǎn)換數(shù)據(jù)格式
#生成作圖數(shù)據(jù)
df <- data.frame(from = rep(rownames(data), ncol(data)),
to = rep(colnames(data), each = nrow(data)),
value = as.vector(data))

image.png

image.png
3、繪圖
1) 顏色設(shè)定
color=NULL
color[c("A","B","C","D","E")]=c("blue","red","yellow","green","pink")
color[rownames(data)]=c("#40A4D8","#33BEB7","#B2C224","#FECC2F","#FBA127",
"#F66320","#DB3937","#A463D7","#0C5BCE","grey","black")
2) 繪圖
chordDiagram(df,
grid.col =color,#顏色
annotationTrack = "grid",
transparency = 0.2,#透明度
link.lwd = 0.00001,#線條寬度
link.lty = 1, # 線路類型
link.border = 0,#邊框顏色
directional = -1,#表示線條的方向,0代表沒有方向,1代表正向,-1代表反向,2代表雙向
diffHeight = mm_h(3),#外圈和中間連線的間隔
direction.type = c("diffHeight","arrows"), #線條是否帶有箭頭
link.arr.type = "big.arrow",#箭頭類型
annotationTrackHeight = c(0.04, 0.1))#網(wǎng)格高度

image.png
3) 添加標(biāo)簽并設(shè)置標(biāo)簽方向
circos.track(track.index = 1, panel.fun = function(x, y) {
circos.text(CELL_META$xcenter, CELL_META$ylim[1], CELL_META$sector.index,
facing = "clockwise", niceFacing = T, adj = c(-0.5, 0.5), cex = 0.8)
circos.axis(h = "top", labels.cex = 0.4,labels.niceFacing = F, labels.pos.adjust =F)
}, bg.border = NA)

image.png
4)生成圖例
legend("right",pch=20,legend=rownames(data),
col=color[rownames(data)],bty="n",
cex=1,pt.cex=3,border="black")

image.png
由于繪圖板大小限制,所以此時我們看到生成的圖例與標(biāo)簽排版混亂,互相重疊,此時需要我們將其保存成PDF以將圖例和圖形主體部分分開。
4、保存
pdf(file="1.pdf", width=9, height=5, pointsize=8)
chordDiagram(df,
grid.col =color,
annotationTrack = "grid",#diy添加label和axis
transparency = 0.2,#透明度
link.lwd = 0.00001,#線條寬度
link.lty = 1, # 線路類型
link.border = 0,#邊框顏色
directional = -1,#表示線條的方向,0代表沒有方向,1代表正向,-1代表反向,2代表雙向
diffHeight = mm_h(3),#外圈和中間連線的間隔
direction.type = c("diffHeight","arrows"), #線條是否帶有箭頭
link.arr.type = "big.arrow",#箭頭類型
annotationTrackHeight = c(0.04, 0.1))#網(wǎng)格高度
circos.track(track.index = 1, panel.fun = function(x, y) {
circos.text(CELL_META$xcenter, CELL_META$ylim[1], CELL_META$sector.index,
facing = "clockwise", niceFacing = T, adj = c(-0.5, 0.5), cex = 0.8)
circos.axis(h = "top", labels.cex = 0.4,labels.niceFacing = F, labels.pos.adjust =F)
}, bg.border = NA)
legend("right",pch=20,legend=rownames(data),
col=color[rownames(data)],bty="n",
cex=1,pt.cex=3,border="black") # 設(shè)定圖例
dev.off()

image.png
此時圖例已經(jīng)和圖形主體部分分開,但是圖中標(biāo)簽還是比較混亂,需要我們使用
5、AI美化

image.png
源碼及數(shù)據(jù)在公眾號后臺回復(fù)