我正在尝试编写一个可以使用基于 '+' 的 ggplot2 语法调用的函数。
myplot + myfunction
具体来说,我正在编写的函数使 y 轴对称于零,因此它需要确定输入图的 y 轴范围。
所以让,
ylim_sym <- function(p){
get_y_range <- function(p){
ggplot2::ggplot_build(p)$layout$panel_ranges[[1]]$y.range
}
max_offset <- max(abs(get_y_range(p)))
p + ylim(- max_offset, max_offset)
}
使用此功能,以下工作:
qplot(x = 1:10, y = exp(rnorm(10))) %>% ylim_sym()
但这不起作用,因为+.gg
and之间存在一些优先级问题%>%
:
qplot(x = 1:10, y = exp(rnorm(10))) +
geom_abline(slope = 0) %>%
ylim_sym()
(我可以写后者(all_my_ggplot_pipeline) %>% ylim_sym()
,但它的语法非常难看)。
理想情况下,我希望能够编写ylim_sym
这样它可以像这样通过管道传输,
qplot(x = 1:10, y = exp(rnorm(10))) + ylim_sym()
但我不知道如何访问内部 LHS 上的+
情节ylim_sym
有任何想法吗?