花瓣圖
對于多樣本的研究秽梅,我們可以采用繪制花瓣圖來更直觀展現(xiàn)颇玷,每個樣本所獨(dú)有的otu數(shù)目和共有的otu數(shù)目锌云。
花瓣圖繪制的原理
因?yàn)闆]有一個相關(guān)的R包,參照的是博客(https://www.cnblogs.com/xudongliang/p/7884667.html)褂乍,其中提到可以以橢圓按一定角度的旋轉(zhuǎn)再加上中心圓得到花瓣圖,本文也采用其所構(gòu)建的畫圖代碼持隧。
R包
install.packages('plotrix')
library(plotrix) #需要安裝plotrix包用以繪制橢圓
好了,接下來就開始花瓣圖的繪制過程
數(shù)據(jù)的導(dǎo)入及處理
>library(plotrix)#載入R包
setwd("C:\\Users\\admin\\Desktop\\exam_plot\\flower-plot")#設(shè)置工作目錄
flower_dat <- read.csv('Class_1_6_venn_list.csv', header = T, sep = ',')#讀取數(shù)據(jù)
sample_id <- colnames(flower_dat)#對單個樣本的otu數(shù)目和所有樣本共有的otu數(shù)目進(jìn)行統(tǒng)計(jì)
sample_id <- colnames(flower_dat)
otu_id <- unique(flower_dat[,1])
otu_id <- otu_id[otu_id != '']
core_otu_id <- otu_id
otu_num <- length(otu_id)
for (i in 2:ncol(flower_dat)) {
otu_id <- unique(flower_dat[,i])
otu_id <- otu_id[otu_id != '']
core_otu_id <- intersect(core_otu_id, otu_id)
otu_num <- c(otu_num, length(otu_id))
}
core_num <- length(core_otu_id)
sample_id為數(shù)據(jù)第一行樣品名逃片;otu_num為每個樣品所獨(dú)有的otu數(shù)目屡拨;core_num為所有樣品所共有的otu數(shù)目。
flower plot花瓣圖函數(shù)的構(gòu)建
ellipse_col <- c('#6181BD4E','#F348004E','#64A10E4E','#9300264E','#464E044E','#049a0b4E')#橢圓的顏色設(shè)置
flower_plot <- function(sample, otu_num, core_otu, start, a, b, r, ellipse_col, circle_col) {
par( bty = 'n', ann = F, xaxt = 'n', yaxt = 'n', mar = c(1,1,1,1))#start為橢圓的起始位置, a為橢圓的短軸, b為橢圓的長軸, r為中心圓的半徑
plot(c(0,10),c(0,10),type='n')
n <- length(sample)
deg <- 360 / n
res <- lapply(1:n, function(t){
draw.ellipse(x = 5 + cos((start + deg * (t - 1)) * pi / 180), #繪制橢圓
y = 5 + sin((start + deg * (t - 1)) * pi / 180),
col = ellipse_col[t],
border = ellipse_col[t],
a = a, b = b, angle = deg * (t - 1))
text(x = 5 + 2.5 * cos((start + deg * (t - 1)) * pi / 180),#在圖上設(shè)置每個樣品的otu_num數(shù)目
y = 5 + 2.5 * sin((start + deg * (t - 1)) * pi / 180),
otu_num[t])
if (deg * (t - 1) < 180 && deg * (t - 1) > 0 ) {
text(x = 5 + 3.3 * cos((start + deg * (t - 1)) * pi / 180),#設(shè)置每個樣品名
y = 5 + 3.3 * sin((start + deg * (t - 1)) * pi / 180),
sample[t],
srt = deg * (t - 1) - start,
adj = 1,
cex = 1
)
} else {
text(x = 5 + 3.3 * cos((start + deg * (t - 1)) * pi / 180),
y = 5 + 3.3 * sin((start + deg * (t - 1)) * pi / 180),
sample[t],
srt = deg * (t - 1) + start,
adj = 0,
cex = 1
)
}
})
draw.circle(x = 5, y = 5, r = r, col = circle_col, border = NA)#繪制中心圓
text(x = 5, y = 5, paste('Core:', core_otu))#設(shè)置中心圓名字
調(diào)用flower plot花瓣圖函數(shù)繪制及保存圖片
png('flower.png', width = 1500, height = 1500, res = 200, units = 'px')
#pdf('flower.pdf')#生成pdf格式
flower_plot(sample = sample_id, otu_num = otu_num, core_otu = core_num,
start = 90, a = 0.5, b = 2.2, r = 0.5, ellipse_col = ellipse_col, circle_col = 'white')
#start為橢圓的起始位置, a為橢圓的短軸, b為橢圓的長軸, r為中心圓的半徑,circle_col為中心圓的顏色呀狼,可以根據(jù)自己的需要調(diào)整
dev.off()
好的以上就是全部的花瓣圖繪制過程了裂允,可以參照本文在R.studio中一行一行測試哦!