分享

ggplot2新功能,可以随处涂鸭了

 萌小芊 2018-05-23

tidyverse已经出博文,将在6月底发布ggplot2 2.3.0版本,主要是加入了tidy evaluation,和其它tidyverse包结合更紧密,viridis配色成为默认,加了geom_sf图层用于画地图。但还有一个重要的功能,没有在博文里讲到,这个功能对于我们这些喜欢玩画图的人来说太重要了,于是我写下这篇(实际上是5月3号写的),介绍了这个到处涂鸦的功能!

ggplot2字体溢出的那点破事》这是经典老问题了,现在新版本的ggplot2有新的解决方案了,在coord_cartesian中新加入了clip参数,这样可以支持把图层画在画布之外,那么文本打过界也就支持了。这有一个好处,是可以支持direct label,而不需要调整xlimylim,毕竟你把xlimylim搞大有时候会给人以误导,认为你的数据取值范围就是图中的xlimylim,但实际上要小一些。

我以ggtree为例,为了让tip label打全,那么p1把时间给搞到2020,但实际上最近的采样时间是2013年,这样你单看x轴的标记,总感觉有一点点不对路,或者有一点点别扭。现在好了,我不设置xlim,而是让label打过界,当然还是需要有足够的空间来放这些文本,这个可以通过把margin搞大来实现。

require(ggtree)
beast_file <->'examples/MCC_FluA_H3.tree', package='ggtree')
beast_tree <->
ggtree(beast_tree, mrsd='2013-01-01') + geom_tiplab(size=2, align=TRUE, linesize=.5) + theme_tree2()  -> p
p1 = p + xlim(NA, 2020)
p + coord_cartesian(clip='off') + theme_tree2(plot.margin=margin(6, 80, 6, 6)) -> p2
cowplot::plot_grid(p1, p2, ncol=2)

如果你脑洞够大,你甚至于可以用theme把坐标轴给去掉,然后自己用geom_segment画坐标轴,于是你可以把ggplot2画成类似于base plot,可以装得特别像。

再者,因为我们可以随意把各种元素画到画布的任何区域上,放开脑洞,各种鬼畜的ggplot2可以走你了!像下面这个GIF,我能盯着看很久:

点击支持原创写作!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约