查看原文
其他

R语言绘制韦恩图的几种方法示例

鲤小白 小白鱼的生统笔记 2022-05-08


R语言绘制韦恩图


    好了,白鱼小编先前已经对几个在线版的韦恩图作图网站作了简介。它们的功能其实已经挺强的了,无论是作图还是交叉元素的统计等,很多时候直接拿来用就行,效果一点也不差。必要时再配合修图工具整理下,完美。

    当然,如果你想使用本地工具绘制韦恩图的话,我很推荐使用R来做,可供选择的R包既多,效果也都非常的不错。下文就继续简介4个常用来绘制韦恩图的R包。

   

     本文使用的作图数据的网盘链接:

    https://pan.baidu.com/s/10h8VqkFE_1Z_60GxsPSX0w


VennDiagram包

  

    首先展示使用VennDiagram包绘制韦恩图的方法,这可能是使用频率最高的一个了,该包适用于2<=样本/或分组数<=5的情形。

    使用网盘链接中的示例数据绘制一个包含5个样本的韦恩图,展示各样本间的共有/特有元素的数量。

library(VennDiagram)
 
#读入作图文件
venn_dat <- read.delim('flower.txt', header = T, sep = '\t', stringsAsFactors = F, check.names = F)
#从中选上 5 个样本作为示例
venn_list <- list(c1 = venn_dat[,1], c2 = venn_dat[,2], c3 = venn_dat[,3], c4 = venn_dat[,4], c5 = venn_dat[,5])
 
#作图,详情使用 ?venn.diagram 查看帮助
venn.diagram(venn_list, filename = 'venn.tiff', 
        fill = c('red', 'green', 'blue', 'orange', 'purple'), alpha = 0.50, cat.col = rep('black', 5), 
        col = 'black', cex = 1, fontfamily = 'serif', cat.cex = 1, cat.fontfamily = 'serif', margin = 0.2)

    作图结果会默认输出在当前工作路径下,如下所示。


gplots包

    

    然后展示使用gplots包绘制韦恩图的方法,该包适用于2<=样本/或分组数<=5的情形。

    使用网盘链接中的示例数据绘制一个包含5个样本的韦恩图,展示各样本间的共有/特有元素的数量。

library(gplots)
 
#读入作图文件
venn_dat <- read.delim('flower.txt', header = T, sep = '\t', stringsAsFactors = F, check.names = F)
#从中选上 5 个样本作为示例
venn_list <- list(c1 = venn_dat[,1], c2 = venn_dat[,2], c3 = venn_dat[,3], c4 = venn_dat[,4], c5 = venn_dat[,5])
 
#作图,详情使用 ?venn 查看帮助
result <- venn(venn_list)
str(result)

    venn()函数可选参数很少,它的作图效果一般。但有一个好处是,它同时将各样本之间的共有/特有元素名称输出出来并赋值给你指定的变量,若有需要后期可作提取。


limma包


    然后是limma包绘制韦恩图的方法,该包适用于2<=样本/或分组数<=5的情形。

    使用网盘链接中的示例数据绘制一个包含5个样本的韦恩图,展示各样本间的共有/特有元素的数量。

library(limma)
 
#读入作图文件
venn_dat <- read.delim('otu_table.txt', row.names = 1, header = T, sep = '\t', stringsAsFactors = F, check.names = F)
venn_dat[venn_dat > 0] <- 1
#从中选上 5 个样本作为示例
venn_data <- vennCounts(as.matrix(venn_dat[1:5]))
 
#作图,详情使用 ?vennDiagram 查看帮助(这函数名称起的,咋一看还以为是那个 vennDiagram 包......)
vennDiagram(venn_data, include = 'both', names = c('c1', 'c2', 'c3', 'c4', 'c5'), cex = 1, 
        counts.col = 'black', circle.col = c('red', 'green', 'blue', 'orange', 'purple'))

    它读取的是一个样本-元素的包含关系矩阵,可以直接在原始数据表格中直接统计作图,因此不用我们再单独整理每个样本/或分组中都包含哪些元素了。作图结果如下。


venn包


    通常韦恩图所展示的样本/或分组数量不会超过5,因为当样本/或分组数量大于5时,绘图结果将难以观测。所以大部分的韦恩图工具不支持大于5个的情形。

    如果你需要,肯定是有方法的,venn包提供了最多可支持7组数据的韦恩图。

library(venn)

#读入作图文件
venn_dat <- read.delim('flower.txt', header = T, sep = '\t', stringsAsFactors = F, check.names = F)
#从中选上 7 个样本作为示例
venn_list <- list(c1 = venn_dat[,1], c2 = venn_dat[,2], c3 = venn_dat[,3], c4 = venn_dat[,4], c5 = venn_dat[,5], c6 = venn_dat[,6], c7 = venn_dat[,7])

#作图,详情使用 ?venn 查看帮助(注:它的作图函数也是 venn(),和上述 gplots 包存在冲突)
venn(venn_list, zcolor = 'style')

    虽然结果出来了,不过貌似……观测数据是不是很头疼?所以其实不建议绘制这种韦恩图了,太费眼。

1

    好了,相信这4个已经足以满足日常需求了,就先到这儿吧。大家若有兴趣,可再自行搜索更多的R包学习了。


    最后,扫一扫下方二维码,可关注本公众号“生信小白鱼”,同样谢谢大家支持。




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存