Chciałbym usunąć layer
(w tym przypadku wyniki geom_ribbon
) z obiektu siatki utworzonego przez ggplot2. Czy istnieje sposób, w jaki mogę go usunąć, skoro jest już częścią obiektu?Usuń warstwę z wykresu 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))
Chciałbym tej funkcjonalności, aby umożliwić mi tworzenie bardziej skomplikowanych działek na mniej skomplikowanych. Używam funkcji, które zwracają obiekt siatki, a następnie drukują końcowy wykres po jego całkowitym złożeniu. Podstawowy wykres ma pojedynczą linię z odpowiadającym mu słupkiem błędu (geom_ribbon
). Bardziej skomplikowany wątek będzie miał kilka linii, a liczne nakładające się obiekty będą się rozpraszać. Chciałbym je usunąć z działek z wieloma liniami. Dodatkowo będę mógł szybko tworzyć alternatywne wersje wykorzystujące aspekty lub inną funkcjonalność ggplot2.
Edit: Przyjmowanie odpowiedź @ mnel jako to działa. Teraz muszę ustalić, jak uzyskać dynamiczny dostęp do warstwy geom_ribbon
, która jest przechwytywana w pytaniu SO here.
Edit 2: Dla kompletności, jest to funkcja stworzyłem, aby rozwiązać ten problem:
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
}
Czy możesz opisać przypadek użycia, w którym możesz go użyć? – Andrie
Odnalezienie konkretnej warstwy wewnątrz 'p $ layers', a następnie jej zatarcie przez przypisanie jej wartości' NULL' prawdopodobnie "zadziałałoby", ale nie przewiduję niezawodności. – joran
Chyba nie rozumiem tego prawa. Jeśli musisz go mieć, ale nie chcesz go zobaczyć, dlaczego nie "alpha = 0"? – Mikko