あんまり需要はないと思うけど,一応メモ。
ggplot2のレイヤー構造について
よく「ggplot2はレイヤー構造である」といわれます。これについては以前別途まとめたので以下の資料を参照してください:
簡単に確認をしてみます。以下のようなggplotオブジェクトを準備します:
library(ggplot2)
g <- ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
geom_point() +
geom_line() +
geom_smooth()
g
#> `geom_smooth()` using method = 'loess'
上記のプロットでは,geom_point
とgeom_line
とgeom_smooth
という3つの描画レイヤーがあります:
g$layers
#> [[1]]
#> geom_point: na.rm = FALSE
#> stat_identity: na.rm = FALSE
#> position_identity
#>
#> [[2]]
#> geom_line: na.rm = FALSE
#> stat_identity: na.rm = FALSE
#> position_identity
#>
#> [[3]]
#> geom_smooth: na.rm = FALSE
#> stat_smooth: na.rm = FALSE, method = auto, formula = y ~ x, se = TRUE
#> position_identity
ggplotオブジェクトからレイヤーを削除
さて本題です。
実のところ,この描画レイヤーはlistになっています:
is.list(g$layers)
#> [1] TRUE
なので,レイヤーを取り除きたいならそのlistの要素を削除すればいいだけです:
g$layers[[2]] <- NULL
g$layers
#> [[1]]
#> geom_point: na.rm = FALSE
#> stat_identity: na.rm = FALSE
#> position_identity
#>
#> [[2]]
#> geom_smooth: na.rm = FALSE
#> stat_smooth: na.rm = FALSE, method = auto, formula = y ~ x, se = TRUE
#> position_identity
g
#> `geom_smooth()` using method = 'loess'
どこで使えるかというのはよくわかりませんが,ggplotの理解には繋がるかなと思いました。
Enjoy!