ggplot2で作成したグリッドオブジェクトからlayer
(この場合はgeom_ribbon
の結果)を削除したいと思います。既にオブジェクトの一部になったら削除する方法はありますか?ggplot2グラフからレイヤーを削除する
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
)が1行あります。より複雑なプロットは複数の線を持ち、複数のオーバーラップするオブジェクトは気を散らす。私はそれらを複数の行でプロットから削除したいと思います。さらに、ファセットやその他の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
}
これを使用するユースケースを教えてください。 – Andrie
'p $ layers'の中の特定の層を見つけてそれに' NULL'を割り当てることによってそれを消滅させるのは、おそらくは "うまくいく"でしょうが、信頼性についての予測はしません。 – joran
私はこの権利を理解していないと思います。あなたはそれを持っていなければならないが、それを見たくないのなら、なぜアルファ= 0でないのですか? – Mikko