ggplot2字体溢出的那点破事
比如下面的代码:
require(ggplot2)
d <- data.frame(x=c(0, 0.002, 0.00575), y = 1:3)
p <- ggplot(d, aes(x, y)) + geom_point() + xlab(NULL) + ylab(NULL)
print(p)
上面图中x轴的文本0.006,这个数字中的6几乎看不到,因为一半过界了。
这种情况还可以更糟糕,比如我把字体搞大点:
p <- p + theme(axis.text=element_text(size=12))
print(p)
简直了,6都看不见了。第一次遇到这种情况,都会觉得这软件也太傻了!连坐标轴都会过界!但事实上,这是一个普遍的现象。因为像点这些,是数据空间,但文本是像素空间,只会按照指定的大小转化为多少个像素,然后把字打出来,这些当然容易打过界了。特别是如果把文本打在数据点的右边,比如我们画进化树时,需要画tip label,这纯粹是在右边打字的,文本通常只有部分显示出来,解决方案就在ggtree的文档里,用xlim
搞大右边。比如这个例子的话,+xlim
很容易解决的:
p + xlim(NA, 0.0062)
当然复杂的情况也是有的,比如你在分面的时候,只有某个分面溢出了,而scales
又是free
的,你直接+xlim
会应用于所有分面,但在free scale的情况下,你只想应用到某一分面,这个也是可以搞的,参考xlim_tree,做为思考题,看大家能不能悟出来。
讲ggtree各种技巧,对于你们学ggplot2也是极有帮助的!
G Yu, DK Smith, H Zhu, Y Guan, TTY Lam*. ggtree: an R package for visualization and annotation of phylogenetic trees with their covariates and other associated data. Methods in Ecology and Evolution. 2017, 8(1):28-36.