繪制多維韋恩圖和UpSetPlot圖
韋恩圖簡介
韋恩圖(Venn plot),又稱文氏圖,是英國的哲學家和數學家約翰·維恩(John Venn)在1881年發明的,主要是用于展示在不同的事物群組(集合)之間的數學或邏輯聯系,尤其適合用來表示集合(或)類之間的“大致關系”,它也常常被用來幫助推導(或理解推導過程)關于集合運算(或類運算)的一些規律。在我們常用的領域,簡單來說就是多個集合之間取交集。
制作venn圖的方法
繪制韋恩圖有很多方式,R,Python,Perl等,這里主要是用R來展示;在R語言中,繪制venn圖有很多包可以實現:Venn, Vennplot, VennDiagram, VennDetail, ggvenn,gplots等。
此文主要展示一下用VennDiagram包繪制高緯度的韋恩圖。
rm(list = ls())
#加載R包
library(VennDiagram)
##VennDiagram輸入數據的格式是2~5個向量組成的list
#創建5個小學字母組成的隨機向量
set.seed(727)
V1 <- sample(letters,size = 20)
V2 <- sample(letters,size = 20)
V3 <- sample(letters,size = 20)
V4 <- sample(letters,size = 20)
V5 <- sample(letters,size = 20)
#繪圖
venn.diagram(x=list(GUO=V1,
FU=V2,
YA=V3,
SE=V4,
WANG=V5),
filename = 'test_venn.tiff')
這樣一個簡單的GUOFUYASEWANG(國服亞瑟王)的韋恩圖就畫出來,通過參數給他加點顏色,美觀一下。
venn.diagram(x=list(GUO=V1,
FU=V2,
YA=V3,
SE=V4,
WANG=V5),
fill=c('red','yellow','blue','grey','green'),#填充一下配色
margin = 0.05,#設置一下間距
filename = './test_venn2.tiff')
增加配色之后好看了不少。
網站繪制韋恩圖
除了用R繪制韋恩圖,還可以用網站實現。http://www.interactivenn.net/可以繪制2-6維的韋恩圖,不需要學會R也能繪制韋恩圖。同學們可以自行探索。
繪制UpSetPlot圖
有時候自己需要取交集的數據集太多,韋恩圖滿足不了,可以采用UpSetplot,它可以將交集數目通過柱狀圖的方式呈現。以UpSetR包里的movies文件做示例:
rm(list = ls())
#加載R包
library(UpSetR)
#載入movies數據集
movies <- read.csv( system.file("extdata", "movies.csv", package = "UpSetR"), header=TRUE, sep=";" )
#查看一下movie數據集
view(movies)
dim(movies)
這是一個3883行,21列的數據集,包含了1995上映的電影具體情況(如Action是否是運動電影,0表示不是運動電影,1表示是運動電影,以此類推)
#簡單繪制UpSetplot
upset(movies, nsets = 7, #繪制的集合數目
mb.ratio = c(0.5, 0.5)#調整上下兩部分的比例
order.by = c("freq"))#為按頻率排序
該圖中黑色表示該位置有數據,灰色的點表示沒有,不同點連線表示存在交集, 不同柱狀圖表示不同的數目
Hoang的簡書地址:http://www.lxweimin.com/u/1fd4ff43abdc