繪制多維韋恩圖和UpSetPlot圖
韋恩圖簡介
韋恩圖(Venn plot),又稱文氏圖,是英國的哲學家和數(shù)學家約翰·維恩(John Venn)在1881年發(fā)明的,主要是用于展示在不同的事物群組(集合)之間的數(shù)學或邏輯聯(lián)系,尤其適合用來表示集合(或)類之間的“大致關系”,它也常常被用來幫助推導(或理解推導過程)關于集合運算(或類運算)的一些規(guī)律。在我們常用的領域,簡單來說就是多個集合之間取交集。

制作venn圖的方法
繪制韋恩圖有很多方式,R,Python,Perl等,這里主要是用R來展示;在R語言中,繪制venn圖有很多包可以實現(xiàn):Venn, Vennplot, VennDiagram, VennDetail, ggvenn,gplots等。
此文主要展示一下用VennDiagram包繪制高緯度的韋恩圖。
rm(list = ls())
#加載R包
library(VennDiagram)
##VennDiagram輸入數(shù)據(jù)的格式是2~5個向量組成的list
#創(chuàng)建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(國服亞瑟王)的韋恩圖就畫出來,通過參數(shù)給他加點顏色,美觀一下。
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')

增加配色之后好看了不少。
網(wǎng)站繪制韋恩圖
除了用R繪制韋恩圖,還可以用網(wǎng)站實現(xiàn)。http://www.interactivenn.net/可以繪制2-6維的韋恩圖,不需要學會R也能繪制韋恩圖。同學們可以自行探索。

繪制UpSetPlot圖
有時候自己需要取交集的數(shù)據(jù)集太多,韋恩圖滿足不了,可以采用UpSetplot,它可以將交集數(shù)目通過柱狀圖的方式呈現(xiàn)。以UpSetR包里的movies文件做示例:
rm(list = ls())
#加載R包
library(UpSetR)
#載入movies數(shù)據(jù)集
movies <- read.csv( system.file("extdata", "movies.csv", package = "UpSetR"), header=TRUE, sep=";" )
#查看一下movie數(shù)據(jù)集
view(movies)
dim(movies)


這是一個3883行,21列的數(shù)據(jù)集,包含了1995上映的電影具體情況(如Action是否是運動電影,0表示不是運動電影,1表示是運動電影,以此類推)
#簡單繪制UpSetplot
upset(movies, nsets = 7, #繪制的集合數(shù)目
mb.ratio = c(0.5, 0.5)#調(diào)整上下兩部分的比例
order.by = c("freq"))#為按頻率排序

該圖中黑色表示該位置有數(shù)據(jù),灰色的點表示沒有,不同點連線表示存在交集, 不同柱狀圖表示不同的數(shù)目
Hoang的簡書地址:http://m.itdecent.cn/u/1fd4ff43abdc