5

「+」ベースの 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ただし、との間の優先順位の問題により、これは機能しません%>%

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

何か案は?

4

2 に答える 2