R语言绘制花瓣图flower plot
R語言中有很多現(xiàn)成的R包,可以繪制venn圖,但是最多支持5組,當(dāng)組別數(shù)大于5時,venn圖即使能夠畫出來,看上去也非常復(fù)雜,不夠直觀;
在實際的數(shù)據(jù)分析中,組別大于5的情況還是經(jīng)常遇到的,這是就可以考慮用花瓣圖來進行數(shù)據(jù)的可視化
比如下面這個例子:
來源于該鏈接 https://www.researchgate.net/figure/235681265_fig3_The-pan-genome-of-Sinorhizobium-The-flower-plots-and-Venn-diagrams-illustrate-the-number
A和D是我們常見的venn圖,B和C 就是花瓣圖了
在花瓣圖中,我們能夠看到兩種信息;
1)所有樣本共有的信息;
2)每個樣本獨有的信息;
花瓣圖既美觀,展示信息也很直觀,那么這樣的圖如何畫呢?
我在網(wǎng)上找了半天,也沒找到現(xiàn)成的工具,只能自己寫代碼來畫!
在寫代碼之前,首先來分析下這張圖,每一片花瓣就是一個橢圓型,整幅圖片可以看做有1個橢圓通過旋轉(zhuǎn)得到
通過以上分析,我們只需要先畫一個橢圓,然后循環(huán)旋轉(zhuǎn)即可
中間的調(diào)試過程就不細講了,直接看寫好的代碼
flower_plot <- function(sample, value, start, a, b,
ellipse_col = rgb(135, 206, 235, 150, max = 255),
circle_col = rgb(0, 162, 214, max = 255),
circle_text_cex = 1.5
) {
par( bty = "n", ann = F, xaxt = "n", yaxt = "n", mar = c(1,1,1,1))
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,
border = ellipse_col,
a = a, b = b, angle = deg * (t - 1))
text(x = 5 + 2.5 * cos((start + deg * (t - 1)) * pi / 180),
y = 5 + 2.5 * sin((start + deg * (t - 1)) * pi / 180),
value[t]
)
if (deg * (t - 1) < 180 && deg * (t - 1) > 0 ) {
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 = 1,
cex = circle_text_cex
)
} 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 = circle_text_cex
)
}
})
draw.circle(x = 5, y = 5, r = 1.3, col = circle_col, border = circle_col)
}
這里我寫成了1個函數(shù),函數(shù)的調(diào)用方式如下;
flower_plot(c("WSM419", "A321", "M1", "M2", "M22", "M58",
"M102", "M161", "KH36b", "KH36c", "KH36d", "KH53a", "KH53b"),
c(519, 556, 83, 62, 415, 425, 357, 441, 22, 41, 33, 44, 43), 90, 0.5, 2)
第一個參數(shù)為樣本名字構(gòu)成的向量,第二個參數(shù)為每個樣本獨有的數(shù)目,第三個參數(shù)為起始橢圓的角度,第四個參數(shù)為橢圓的短軸的長度,第五個參數(shù)為橢圓的長軸的長度
效果圖如下:
總結(jié)
以上是生活随笔為你收集整理的R语言绘制花瓣图flower plot的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二维矩阵的算法
- 下一篇: 以《热乎炖大锅台》寻求一幅对联