#############################方法1
######加载本次所需的R包
library(grid)
library(futile.logger)
1.绘制根据数据量的大小来确定圆的大小,也就是两圆的大小会根据数据大小而改变,具体操作如下:
venn.plot <- draw.pairwise.venn(100, 70, 30, c("First", "Second"));
#这里的100, 70, 30分别代表圆1、圆2、两个圆交叉的数
grid.draw(venn.plot);#展示当前的图
grid.newpage();#去除当前的图
结果图如下:
2.绘制不根据数据量的大小来确定圆的大小,也就是两圆的大小相同,具体操作如下:
venn.plot <- draw.pairwise.venn(100, 70, 30, c("First", "Second"), scaled = FALSE);
grid.draw(venn.plot);
grid.newpage();
结果图如下:
3.图形的调整,包括颜色改变、细节修改,具体操作如下:
venn.plot <- draw.pairwise.venn(
area1 = 100, #区域1的数
area2 = 70, #区域2的数
cross.area = 30, #交叉数
category = c("First", "Second"),#分类名称
fill = c("#00A087FF","#DC0000FF"),#区域填充颜色
lty = "blank", #区域边框线类型
cex = 2, #区域内部数字的字体大小
cat.cex = 2, #分类名称字体大小
cat.pos = c(285, 105), #分类名称在圆的位置,默认正上方,通过角度进行调整
cat.dist = 0.09, #分类名称距离边的距离(可以为负数)
cat.just = list(c(-1, -1), c(1, 1)), #分类名称的位置
ext.pos = 30, #线的角度 默认是正上方12点位置
ext.dist = -0.05, #外部线的距离
ext.length = 0.85, #外部线长度
ext.line.lwd = 2, #外部线的宽度
ext.line.lty = "dashed" #外部线为虚线
);
结果图如下所示:
这个方法的优点就是可以直接指定第一个圆,第二个圆、以及两圆的交叉数,但缺点也比较明显,无法显示百分比,无法用ggplot指定颜色代表什么意思。
网上其他一些画韦恩图的方法,比如:ggvenn包
install.packages("ggvenn")
library(ggvenn)
#生成列表数据
a<-list( Set1 = c(1:3),
Set2 = c(1:5))
b<-list_to_data_frame(a)#列表数据转化为数据框
ggvenn(b)#利用数据框作图
我们结合结果图和数据框理解一下这个包的思维:
可以看到set1为0,set2为2,交叉部分是3,为什么是这样的呢?
在生成列表数据时set1是1,2,3;set2是1,2,3,4,5
所以这里1,2,3是两个共有的,4,5是set2独有的,set1独有的没有
那么,这个思维理解之后,可以看到数据框的意思:
比如1,Set1为TRUE,Set2为TRUE,即代表两者共有;
比如3,Set1为FALSE,Set2为TRUE,即代表Set2独有;
所以按照这个逻辑绘制两圆的交叉图时候就需要列如下数据框的三列变量,
第一列为不同时值,第二列和第三列就是判断这个值是否属于本列。
值得注意的有两个点:1是第一列不能有重复值;2.这个包最后的百分比合计就是100%,这个感觉是个缺陷,后续怎么解决,再研究吧