这是去年「知识星球」里的提问,「知识星球」相当于是众筹我一年的时间,向我提问,请谨慎入坑。

我当时就写了一个函数ggvenn,这个函数其实包装了venneuler,但由于venneuler依赖rJava,而很多小伙伴不会装rJava,而因此装不了yyplot,所以我去掉了这个依赖,但如果你想要用ggvenn这个函数,请自行安装rJavavenneuler。其实还有另外一个包,VennDiagram,它的输出是gList,所以可以直接封装为ggplot2图层,然而对于画venn plot,我并没有太多的兴趣,《CS6: ChIPseeker的可视化方法(中秋节的视觉饕餮)》一文中介绍的upset plot,可能更好一些。

Continue reading

有小伙伴在说可以用par(mar)来设置画图的margin,但不能应用于ggplot2,这个可能很多新手都会很困扰,可能需要一段时间的探索之后,才能发现原来是用theme来设定。

这当然你可以归结于说ggplot2和base plot是不同的东西,但从实质画图参数这一点而言,并没有什么同与不同,无非是设置的方式不同而已,而这种方式都是人定义的,我们完全可以人为定义它们兼容。

Continue reading

画个小圈圈

之前我发表读书笔记《主成分分析

这可能是你见过最好看的PCA图了,有人在「宏基因组」群里问有没有什么包可以画?像这种提问,我以前是吐槽过的,请猛击《如何画类似MEME的注释序列》,当然说什么都没用,大家就是喜欢凡事问有包吗?因为包治百病嘛,不信你送个包给你女票试试!

jimmy回答说ggbiplot可以画差不多的,于是「宏基因组」公众号立刻就出来一篇《ggbiplot-最好看的PCA作图:样品PCA散点+分组椭圆+变量贡献与相关》,后面又有人提问,能不能加两个置信区间?@Chenhao童鞋就给出了解决方案,并且写了篇博客文介绍.

他的作图是基于ggord包,只能应用于LDA,于是「宏基因组」公众号又跟进发一篇《比PCA更好用的监督排序—LDA分析、作图及添加置信-ggord》,你会发现他们介绍同一类型的作图,一会这个包,一会那个包,一会某包有A功能,某包又有B功能,我就不说什么了。

Continue reading

在很久很久以前,当我还在用perl的时候,有一个TGen-EUtils的perl模块,可以去爬PubMed,我喜欢用它来画所谓的pubmed趋势,比如说我在2012年的时候,就画了各个组学技术的pubmed趋势,通过每一年的文章发表量来看某个技术到底火不火,走势怎么样。

当年microarray还特别猛,但显然可以看到二代测序必须要火,也可以看到proteomics在吹了几年牛B之后,有回落的趋势。

Continue reading

小伙伴发来这个文章中的图,想要实现类似的图,用变量给axis text上色,并生成legend:

![](https://guangchuangyu.github.io/blog_images/R/ggplot2/Screenshot 2017-07-04 14.10.55.png)

这个可以说ggplot2是不支持的,aes映射不会被应用于axis上,而theme也不支持aes映射,你只能自己手动搞个color vector传给theme来上色,但这无法生成legend。

我只能打开脑洞,legend借助于额外的图层来生成,但这个额外的图层又不是我们想要在图形上展示的,这又是个无米之炊,我能想到的就是让图层透明,实际有,但你看不到,当然这样自动生成的legend也会看不到,但legend可以后面再修改,于是这不支持的事情,就通过变通变得可能:

require(ggplot2)

set.seed(2017-07-04)
d <- data.frame(x = letters[1:5], y = rnorm(5), 
		group = sample(c("Control", "Treatment"), 5, replace=TRUE),
		type = sample(LETTERS[1:2], 5, replace=TRUE)
)

p <- ggplot(d, aes(x,y)) + 
	geom_col(aes(fill=group))

这个代码很好懂,画一个柱状图,按group上色。

Continue reading

最近公众号「生信媛」和「生信宝典」的小伙伴在说ggplot2无法一次性设置所有字体,theme只能设置axis text, title这些,而搞不了geom_textgeom_text必须要手工输入family=XXX来设置,因为不能使用theme来更换,也就是说没办法通过后处理来设定,比较麻烦。

这显然是不对的,后处理必须可以的,一次性满足所有愿望也只是因为没人写个神奇的函数而已。于是我就动手写了个set_font的函数。

假设我们有下图:

library(ggplot2)
d <- data.frame(x=rnorm(10), y=rnorm(10), lab=LETTERS[1:10])
p <- ggplot(d, aes(x, y)) + 
    geom_text(aes(label=lab, color=lab), size=10) + 
	geom_text(aes(y, x, label=lab), size=3)

Continue reading

Author's picture

Guangchuang Yu

Bioinformatics Professor @ SMU

Bioinformatics Professor

Guangzhou