如何为ggplot2构建符合组合模式的助手函数?
解决ggplot2助手函数的组合模式问题
这个问题我之前也碰到过!其实核心原因是ggplot2的+运算符只能把ggproto对象(比如图层、坐标系统)添加到ggplot主对象上,而不能直接把两个ggproto对象互相相加。下面给你两种简单可行的解决方法:
方法1:返回图层/配置的列表
让助手函数返回一个包含所有需要添加元素的列表,ggplot的+运算符支持直接接收列表并自动展开添加:
require(ggplot2) my_helper = function(pointSize=.1){ list( geom_point(size=pointSize), coord_fixed() ) } # 调用方式和你原来的写法完全一致,不会报错 ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Petal.Length)) + my_helper()
方法2:让助手函数接收并返回ggplot对象
另一种思路是把ggplot对象作为参数传入助手函数,在函数内部完成元素添加后返回新的ggplot对象:
require(ggplot2) my_helper = function(plot_obj, pointSize=.1){ plot_obj + geom_point(size=pointSize) + coord_fixed() } # 调用时把ggplot对象传入函数 my_helper(ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Petal.Length)))
第一种方法更贴近你原本的使用习惯,适合快速封装常用的图层组合;第二种方法则更直观,适合需要对ggplot对象做更多自定义修改的场景。
内容的提问来源于stack exchange,提问作者Holger Brandl
相关产品推荐
相关产品推荐

