Help us understand the problem. What is going on with this article?

ggplotオブジェクトからlayerを削除する

More than 3 years have passed since last update.

あんまり需要はないと思うけど,一応メモ。

ggplot2のレイヤー構造について

よく「ggplot2はレイヤー構造である」といわれます。これについては以前別途まとめたので以下の資料を参照してください:

ggplotのオブジェクトから眺めてみる

簡単に確認をしてみます。以下のようなggplotオブジェクトを準備します:

library(ggplot2)
g <- ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
  geom_point() +
  geom_line() +
  geom_smooth()
g
  #> `geom_smooth()` using method = 'loess'

unnamed-chunk-1-1.png

上記のプロットでは,geom_pointgeom_linegeom_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'

unnamed-chunk-4-1.png

どこで使えるかというのはよくわかりませんが,ggplotの理解には繋がるかなと思いました。

Enjoy!

kazutan
ただの残念なぞうさんです。同名のTwitterアカウントでほそぼそと。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away