小伙伴发来这个文章中的图,想要实现类似的图,用变量给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

群众纷纷表示图二是Excel画的,我觉得也是!Excel是生物学家的最爱啊。虽然做生信的人都看不上,最主要是没有记录,不具备可重复性。但现实就是大家都爱Excel。

Continue reading

在《你所不知道的,R的N种打开方式》一文中,我介绍了R的N种界面,这里将介绍一个用python写的极其现代化的R命令行界面,rtichoke(之前叫rice)之于R,就像ipython之于python一样。

特性

  • 轻量,不需要编译
  • 多行编辑,这点很重要啊,长长的命令可以换行后,随便回去编辑前面的指令
  • 语法高亮,这可是R命令行所没有的,看起来舒服多了
  • 自动补齐,减少输入
  • 支持bracketed paste mode,也就是说你copy-paste了有换行符的字符串,不会拷进去就自动执行了
  • 支持Windows, macOS 和 Linux
  • 支持vi, emacs等编辑模式
  • 可以多种高亮模式

Continue reading

最初github上用户(@JustGitting)报告说geom_hilightgeom_cladelabel不能用于unrooted树。详见:https://github.com/GuangchuangYu/ggtree/issues/118

我表示这确实是不行的,然后这就变成了feature request。我继续表示unrooted tree在ggtree中的实现并不好,我只实现了equal angle algorithm,在写注释图层之前,如果我有时间的话,我希望可以先实现更好的layout algorithm。

然后JustGitting表示,他发现python的ETE和R的ape,在无根树的可视化上好像都不太行。问我有什么unrooted的layout algorithm,有没有什么参考文献,或许他可以帮忙实现,因为他觉得ggtree是最成熟的软件。

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