日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

R语言绘制花瓣图flower plot

發(fā)布時(shí)間:2024/8/26 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 R语言绘制花瓣图flower plot 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

R語(yǔ)言中有很多現(xiàn)成的R包,可以繪制venn圖,但是最多支持5組,當(dāng)組別數(shù)大于5時(shí),venn圖即使能夠畫(huà)出來(lái),看上去也非常復(fù)雜,不夠直觀;

在實(shí)際的數(shù)據(jù)分析中,組別大于5的情況還是經(jīng)常遇到的,這是就可以考慮用花瓣圖來(lái)進(jìn)行數(shù)據(jù)的可視化

比如下面這個(gè)例子:

來(lái)源于該鏈接 https://www.researchgate.net/figure/235681265_fig3_The-pan-genome-of-Sinorhizobium-The-flower-plots-and-Venn-diagrams-illustrate-the-number

A和D是我們常見(jiàn)的venn圖,B和C 就是花瓣圖了

在花瓣圖中,我們能夠看到兩種信息;

1)所有樣本共有的信息;

2)每個(gè)樣本獨(dú)有的信息;

花瓣圖既美觀,展示信息也很直觀,那么這樣的圖如何畫(huà)呢?

我在網(wǎng)上找了半天,也沒(méi)找到現(xiàn)成的工具,只能自己寫(xiě)代碼來(lái)畫(huà)!

在寫(xiě)代碼之前,首先來(lái)分析下這張圖,每一片花瓣就是一個(gè)橢圓型,整幅圖片可以看做有1個(gè)橢圓通過(guò)旋轉(zhuǎn)得到

通過(guò)以上分析,我們只需要先畫(huà)一個(gè)橢圓,然后循環(huán)旋轉(zhuǎn)即可

中間的調(diào)試過(guò)程就不細(xì)講了,直接看寫(xiě)好的代碼

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)
}

這里我寫(xiě)成了1個(gè)函數(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)

第一個(gè)參數(shù)為樣本名字構(gòu)成的向量,第二個(gè)參數(shù)為每個(gè)樣本獨(dú)有的數(shù)目,第三個(gè)參數(shù)為起始橢圓的角度,第四個(gè)參數(shù)為橢圓的短軸的長(zhǎng)度,第五個(gè)參數(shù)為橢圓的長(zhǎng)軸的長(zhǎng)度

效果圖如下:

總結(jié)

以上是生活随笔為你收集整理的R语言绘制花瓣图flower plot的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。