最近公众号「生信媛」和「生信宝典」的小伙伴在说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)

那么使用set_font,我们可以一次性设置所有字体包括family, fontface, color, size等。

library(yyplot)
g <- set_font(p, family="Times", 
    fontface="italic", color="firebrick", size=5)

即使你的文本,本来有不同的大小,不同的颜色,不同的字体,全部可以变成一样。当然很多时候并不想所有元素都一致统一,而只是想某些元素统一,比如示例的图中,我们只想改字体,但不想改文字大小和颜色,这是可以的,set_font只改你传入的参数,没指定的元素是不会改变的。

g2 <- set_font(p, family="Arial", fontface="italic")

最后放个全家福。

cowplot::plot_grid(p, g, g2, ncol=3)

这个函数放在yyplot包,不知道是什么的请点击此处,基本上就是个平时画图写着玩的一些小函数。

ggplot2系列