利用代码注释入门Venn图

写在前面的话

如果代码注释的好,不用多余的废话就自成一个教程。虽然我注释的也不不完美,但我想试试……

简介

包含,还是相交,亦或者其他集合关系,只看数据有时无法正确判断。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
)

以下是上述代码的输出结果,看起来比较简陋,比如没有着色,字体太小等。


利用代码注释入门Venn图_第1张图片

参数介绍

下面以代码举例,讲解具体的参数含义:

# 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图_第2张图片

虽然使用的是相同的数据,但是经过悉心调教,绘制出来的图看着顺眼多了……

当然除了这些,还有许多可以自定义的参数,如Venn图的副标题( sub ),填充颜色的透明度( alpha )等。这些可以在R中使用 ?venn.diagram 详细查看。

注意事项

使用 VennDiagram 绘制 Venn 图时,它经常会在你输出图片的路径下,生成一个log日志。虽然影响不大,但是对于强迫症来说,真的是很难忍。好在我们可以解决这个问题。

VennDiagram包在绘图时,会调用 futile.logger 包,为了防止日志的产生,我们只需要在绘图代码运行前,提前运行以下代码即可:

futile.logger::flog.threshold(futile.logger::ERROR, name = "VennDiagramLogger")

你可能感兴趣的:(利用代码注释入门Venn图)