写在前面的话
如果代码注释的好,不用多余的废话就自成一个教程。虽然我注释的也不不完美,但我想试试……
简介
包含,还是相交,亦或者其他集合关系,只看数据有时无法正确判断。Venn图可以帮助我们更好的梳理数据之间的关系。
绘制Venn图最常用的R包是 Venndiagram
,其画图功能主要依赖于 venn.diagram()
函数。它的输入是向量组成的列表,每个向量提供一组数据。该函数首先计算列表中每个向量的元素个数,然后绘制结果,将每个集合显示为一个圆。除此之外,其可以输出多种格式的图片,可以自定义输出路径。
简单示例
# 载入VennDiagram包
library(VennDiagram)
# 生成三组具有两百个元素的向量
set1 <- paste(rep("word_" , 200) , sample(c(1:1000) , 200 , replace=F) , sep="")
set2 <- paste(rep("word_" , 200) , sample(c(1:1000) , 200 , replace=F) , sep="")
set3 <- paste(rep("word_" , 200) , sample(c(1:1000) , 200 , replace=F) , sep="")
# Chart
venn.diagram(
x = list(set1, set2, set3), # 向量组成的列表
category.names = c("Set 1" , "Set 2 " , "Set 3"), # Venn图中每个圈的名字
filename = '#14_venn_diagramm.png', # 输出路径
output=TRUE
)
以下是上述代码的输出结果,看起来比较简陋,比如没有着色,字体太小等。
参数介绍
下面以代码举例,讲解具体的参数含义:
# Load library
library(VennDiagram)
set1 <- paste(rep("word_" , 200) , sample(c(1:1000) , 200 , replace=F) , sep="")
set2 <- paste(rep("word_" , 200) , sample(c(1:1000) , 200 , replace=F) , sep="")
set3 <- paste(rep("word_" , 200) , sample(c(1:1000) , 200 , replace=F) , sep="")
# 利用RColorBrewer包,选取三个颜色
library(RColorBrewer)
myCol <- brewer.pal(3, "Pastel2") # 输出结果为向量
# 图片绘制
venn.diagram(
# 利用三组数据生成list
x = list(set1, set2, set3),
category.names = c("Set 1" , "Set 2 " , "Set 3"),
filename = '#14_venn_diagramm.png',
output=TRUE,
# 对输出的图片进行定义
imagetype="png" , # 格式
height = 480 , # 高度
width = 480 , # 宽度
resolution = 300, # 分辨率
compression = "lzw", # 输出图片所使用的压缩算法
# Venn图中,圆圈的定制
lwd = 2, # 线条宽度 line width
lty = 'blank', # 线条类型 line type
fill = myCol, # 圆圈的填充颜色,选用上面定义的颜色
# Venn图,圈圈里面的字体定制
cex = .6, # 字体大小
fontface = "bold", # 字体
fontfamily = "sans", # 字族
# 集合名称的字体定制(即:上图中圈外的名字。如“set1”)
# cat是category(类别)的简称
cat.cex = 0.6, #字体大小
cat.fontface = "bold",
cat.default.pos = "outer", # 名字所在的位置
cat.pos = c(-27, 27, 135), # 名字相对圆圈所在的方向
cat.dist = c(0.055, 0.055, 0.085), # 名字距离圆圈边缘的距离
cat.fontfamily = "sans",
rotation = 1, # 三个集合时,处于左上角的圆圈属于哪个集合
# Venn图的标题
# main="Intersection of three sets",
# main.cex = .8,
# main.fontface = "bold",
# main.fontfamily = "sans"
)
下面是上述代码,所绘制出的图案:
虽然使用的是相同的数据,但是经过悉心调教,绘制出来的图看着顺眼多了……
当然除了这些,还有许多可以自定义的参数,如Venn图的副标题(
sub
),填充颜色的透明度(alpha
)等。这些可以在R中使用?venn.diagram
详细查看。
注意事项
使用 VennDiagram
绘制 Venn
图时,它经常会在你输出图片的路径下,生成一个log日志。虽然影响不大,但是对于强迫症来说,真的是很难忍。好在我们可以解决这个问题。
VennDiagram
包在绘图时,会调用 futile.logger
包,为了防止日志的产生,我们只需要在绘图代码运行前,提前运行以下代码即可:
futile.logger::flog.threshold(futile.logger::ERROR, name = "VennDiagramLogger")