ggplot2 で作成されたグリッド オブジェクトからlayer
(この場合は の結果)を削除したいと思います。geom_ribbon
すでにオブジェクトの一部になっている場合、それを削除する方法はありますか?
library(ggplot2)
dat <- data.frame(x=1:3, y=1:3, ymin=0:2, ymax=2:4)
p <- ggplot(dat, aes(x=x, y=y)) + geom_ribbon(aes(ymin=ymin, ymax=ymax), alpha=0.3)
+ geom_line()
# This has the geom_ribbon
p
# This overlays another ribbon on top
p + geom_ribbon(aes(ymin=ymin, ymax=ymax, fill=NA))
この機能により、それほど複雑でないプロットの上に、より複雑なプロットを作成できるようにしたいと考えています。グリッド オブジェクトを返す関数を使用し、完全に組み立てられたら最終的なプロットを印刷しています。geom_ribbon
ベース プロットには、対応するエラー バー ( ) で囲まれた単一の線があります。より複雑なプロットには複数の線があり、複数の重なり合うgeom_ribbon
オブジェクトが邪魔になります。複数行のプロットからそれらを削除したいと思います。さらに、ファセットやその他の ggplot2 機能を使用して、代替バージョンをすばやく作成できます。
編集: @mnelの回答をそのまま受け入れます。ここで、レイヤーに動的にアクセスする方法を決定する必要があります。geom_ribbon
これは SO の質問hereでキャプチャされます。
編集2:完全を期すために、これは私がこの問題を解決するために作成した関数です:
remove_geom <- function(ggplot2_object, geom_type) {
layers <- lapply(ggplot2_object$layers, function(x) if(x$geom$objname == geom_type) NULL else x)
layers <- layers[!sapply(layers, is.null)]
ggplot2_object$layers <- layers
ggplot2_object
}
編集 3: ggplot の最新バージョン (>=2.xy) については、以下の受け入れられた回答を参照してください。