用ggplot2画维恩图
这是去年「知识星球」里的提问,「知识星球」相当于是众筹我一年的时间,向我提问,请谨慎入坑。
我当时就写了一个函数ggvenn
,这个函数其实包装了venneuler
,但由于venneuler
依赖rJava
,而很多小伙伴不会装rJava
,而因此装不了yyplot
,所以我去掉了这个依赖,但如果你想要用ggvenn
这个函数,请自行安装rJava
和venneuler
。其实还有另外一个包,VennDiagram
,它的输出是gList
,所以可以直接封装为ggplot2
图层,然而对于画venn plot,我并没有太多的兴趣,《CS6: ChIPseeker的可视化方法(中秋节的视觉饕餮)》一文中介绍的upset plot,可能更好一些。
要使用ggvenn
是非常简单的,你只要给定一个matrix,这个matrix每一个column代表一个分组,数字0代表没有overlap,而非0代表overlap,数字的大小可以当做是overlap的加权。当然还支持别形式的输入,具体可以参考venneuler
的文档。
set.seed(2017-11-08)
x <- matrix(sample(0:4, 40, TRUE, c(.5, .1, .1, .1, .1)), ncol=4)
colnames(x) <- LETTERS[1:4]
yyplot::ggvenn(x)
如果你跑上面的代码,你可以看到下面的图:
变成ggplot2
出图的好处,我想不用多说,你可以用ggplot2
的主题系列做点后戏,还可以用grid
做后后戏,比如《一次解决ggplot2所有字体》,然后你可以用cowplot
拼图,用ggimage
图上嵌图,《ggimage:ggplot2中愉快地使用图片》,比如此处可以预告一下,我们可以把这个维恩图嵌在UpSet图中,正如我在《CS6: ChIPseeker的可视化方法(中秋节的视觉饕餮)》中嵌入一个vennpie一样。现在有ggimage
,这些活都只是一句代码的事情。
一点都不YY的yyplot
- Y叔的新玩意–yyplot
- 一次解决ggplot2所有字体
- 映射变量给axis上色
- pubmed年度趋势,你的开题报告需要它!
- 130岁了,祝你生快
- 画个小圈圈
- ggplot扩展学习笔记–逐行解析Y叔的"geom_ord_ellipse.R"