R包circlize:柱狀圖用膩了?試試好看的弦狀圖

柱狀圖用膩了?試試好看的弦狀圖

作者:鄭偉 西北農林科技大學

責編:劉永鑫 中科院遺傳發育所

弦圖簡介

總體來講,弦圖是一種視覺化微生物物種或基因相對丰度的方法。平時大多數時間我們看到的文章一般都用柱狀圖表示微生物或者基因的相對丰度,弦圖和柱狀圖最大的區別就在於它不僅可以用來表示微生物物種或者基因的多少,還可以用來表示環境因子和物種或者基因的相關性。之前公眾號已經推送過《弦圖的基礎R包(circlize)的用法》,筆者今天帶來的是如何利用弦圖表示微生物相對丰度,如果大家用柱狀圖用膩了,可以用一下弦圖,或許會帶來耳目一新的感覺。此圖主要運用R語言,所採用的R包主要為

circlize

資料準備

測試資料和程式碼,後臺回覆

circlize

獲得下載連結

本文中所採用的資料為微生物的各個門的相對丰度(如選取前10或者丰度較高的門),可以加重複也可以只用各處理的平均值,資料排列如下(本人儲存的是csv格式,也可以用txt格式):

R包circlize:柱狀圖用膩了?試試好看的弦狀圖

程式碼部分

下面看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”) # 設定圖例

初期畫出來的圖如下,此圖類似於柱狀圖,區域面積越大表示相對丰度越高,上面四個為處理,下面的為微生物各個門的相對丰度:

R包circlize:柱狀圖用膩了?試試好看的弦狀圖

我們目前預覽的圖看,圖例和圖區嚴重重疊。是因為繪圖區空間的限制。我們只需在圖片輸出時調置圖片寬大於高即可解決。

儲存以上圖片

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

R包circlize:柱狀圖用膩了?試試好看的弦狀圖

現在圖例和檔案不再重疊。有些門的文字重疊。可以在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等其他軟體出的例圖:

R包circlize:柱狀圖用膩了?試試好看的弦狀圖

作者簡介

鄭偉:西北農林科技大學資源環境學院,植物營養學專業。研究方向為土壤微生物生態,具體為不同施肥方式及農業措施介導下土壤微生物群落結構及功能基因在土壤養分週轉及作物營養吸收方面的相互作用。曾參與國家自然科學基金,農業部公益性專案等多個專案的研究工作。目前發表科研論文近20餘篇,相關研究成果以第一作者在

Soil Biology Biochemistry、Biology and Fertility of Soils、European Journal of Soil Biology

等土壤學領域著名期刊發表。獲本專業相關專利2項。在宏基因組公眾號發表《生信小白的福音——免費線上分析擴增子資料SILVAngs》、《功能預測之Tax4Fun》 、《Cytoscape:MCODE增強包的網路模組化分析》等。