日常瞎掰
最近遇到一个特别的需求,为什么说特别呢?一般我们用ggplot2画出的分面图只有一个x、y轴(如下图所示),每个框就是一个独立的分面,可以看到每一横排共用一个y轴,每一列共用一个x轴,其实这样一来出来最后一排有x轴的刻度外,其他是不显示刻度的,这样的好处是画图比较简洁,如果各分面的坐标轴想保持一致,这不失为一个很好的展现形式。
如果我们的审美就是与众不同,就是想每一个分面都有自己的坐标轴呢(如下图所示)?这个时候原生的ggplot2好像就不是很给力了,想要实现起来估计得费一番周折。好在,已经有大佬替我们实现了这个功能,我们只需调用一下别人的R包即可轻松完成这个任务。
庐山真面目
下面让我们一起来看看这个R包——lemon。例如实现上面展示的功能就非常简单了,添加几行代码即可实现:
# 安装
devtools::install_github("stefanedwards/lemon")
# 画图
p <- ggplot(mpg, aes(displ, cty)) + geom_point()
p + theme_bw()+ facet_rep_wrap(~ interaction(cyl, drv), scales='free_y', repeat.tick.labels = 'left')
效果图如下:
有了这个R包想添加坐标轴只是添加几句代码的事。不知道大家有没有发现,这个R包可以用interaction函数改变ggplot2自带的facet_grid的展示方式。如第一图每一列的分类变量分别是4、5、6、8,每一行的分类变量分别是4、f、r,当使用了interaction函数后将横纵分面的标签统一显示到独立面板的上方(如第二张图所示)。只是想添加坐标轴只需使用facet_rep_grid、facet_rep_wrap即可,如果想要个性的坐标轴展示方式可以详细研究一下官方文档组合出更多花样。
结束语
lemon包是基于ggplot2绘图语法的,所以不妨碍ggplot2本身的任何功能。该包还有一些其他的功能,这里就不再介绍了,感兴趣的可以自行去探索一下。按照惯例最后附上官方说明链接:https://cran.r-project.org/web/packages/lemon/vignettes/facet-rep-labels.html。
网友评论