#############################方法1
######加載本次所需的R包
library(grid)
library(futile.logger)
1.繪制根據(jù)數(shù)據(jù)量的大小來確定圓的大小,也就是兩圓的大小會(huì)根據(jù)數(shù)據(jù)大小而改變,具體操作如下:
venn.plot <- draw.pairwise.venn(100, 70, 30, c("First", "Second"));
#這里的100, 70, 30分別代表圓1、圓2、兩個(gè)圓交叉的數(shù)
grid.draw(venn.plot);#展示當(dāng)前的圖
grid.newpage();#去除當(dāng)前的圖
結(jié)果圖如下:

2.繪制不根據(jù)數(shù)據(jù)量的大小來確定圓的大小,也就是兩圓的大小相同,具體操作如下:
venn.plot <- draw.pairwise.venn(100, 70, 30, c("First", "Second"), scaled = FALSE);
grid.draw(venn.plot);
grid.newpage();
結(jié)果圖如下:

3.圖形的調(diào)整,包括顏色改變、細(xì)節(jié)修改,具體操作如下:
venn.plot <- draw.pairwise.venn(
? area1 = 100, #區(qū)域1的數(shù)
? area2 = 70, #區(qū)域2的數(shù)
? cross.area = 30, #交叉數(shù)
? category = c("First", "Second"),#分類名稱
? fill = c("#00A087FF","#DC0000FF"),#區(qū)域填充顏色
? lty = "blank", #區(qū)域邊框線類型
? cex = 2, #區(qū)域內(nèi)部數(shù)字的字體大小
? cat.cex = 2, #分類名稱字體大小
? cat.pos = c(285, 105), #分類名稱在圓的位置,默認(rèn)正上方,通過角度進(jìn)行調(diào)整
? cat.dist = 0.09, #分類名稱距離邊的距離(可以為負(fù)數(shù))
? cat.just = list(c(-1, -1), c(1, 1)), #分類名稱的位置
? ext.pos = 30, #線的角度 默認(rèn)是正上方12點(diǎn)位置
? ext.dist = -0.05, #外部線的距離
? ext.length = 0.85, #外部線長度
? ext.line.lwd = 2, #外部線的寬度
? ext.line.lty = "dashed" #外部線為虛線
);
結(jié)果圖如下所示:

這個(gè)方法的優(yōu)點(diǎn)就是可以直接指定第一個(gè)圓,第二個(gè)圓、以及兩圓的交叉數(shù),但缺點(diǎn)也比較明顯,無法顯示百分比,無法用ggplot指定顏色代表什么意思。
網(wǎng)上其他一些畫韋恩圖的方法,比如:ggvenn包
install.packages("ggvenn")
library(ggvenn)
#生成列表數(shù)據(jù)
a<-list( Set1 = c(1:3),
? ? ? ? ? ? Set2 = c(1:5))
b<-list_to_data_frame(a)#列表數(shù)據(jù)轉(zhuǎn)化為數(shù)據(jù)框
ggvenn(b)#利用數(shù)據(jù)框作圖
我們結(jié)合結(jié)果圖和數(shù)據(jù)框理解一下這個(gè)包的思維:
可以看到set1為0,set2為2,交叉部分是3,為什么是這樣的呢?
在生成列表數(shù)據(jù)時(shí)set1是1,2,3;set2是1,2,3,4,5
所以這里1,2,3是兩個(gè)共有的,4,5是set2獨(dú)有的,set1獨(dú)有的沒有
那么,這個(gè)思維理解之后,可以看到數(shù)據(jù)框的意思:
比如1,Set1為TRUE,Set2為TRUE,即代表兩者共有;
比如3,Set1為FALSE,Set2為TRUE,即代表Set2獨(dú)有;
所以按照這個(gè)邏輯繪制兩圓的交叉圖時(shí)候就需要列如下數(shù)據(jù)框的三列變量,
第一列為不同時(shí)值,第二列和第三列就是判斷這個(gè)值是否屬于本列。
值得注意的有兩個(gè)點(diǎn):1是第一列不能有重復(fù)值;2.這個(gè)包最后的百分比合計(jì)就是100%,這個(gè)感覺是個(gè)缺陷,后續(xù)怎么解決,再研究吧

