Я пытаюсь понять, как я могу вносить изменения в внутренности диаграммы ggplot2. Я начал читать несколько ресурсов, которые я мог найти о ggplot_built
и ggplot_gtable
, но я не мог ответить на вопрос ниже.
С учетом графика g
с 2 geom
.
g <- ggplot(iris, aes(Petal.Length, Petal.Width)) +
geom_point() +
geom_text(aes(label=Sepal.Width))
g
Есть ли способ погрузиться в объект g
и удалить одну или несколько геометров?
Могу ли я получить, начиная с g
, сюжет без геом?
Или с geom_text
?
ОБНОВЛЕНИЕ после более тщательного тестирования ответов
Я только заметил, что удаление геометров может повлиять на расположение других геометрий. Вероятно, большой по умолчанию и предполагаемое поведение для большинства случаев использования, но мне действительно нужна точная схема "макета" (ось и положение оставшихся геометрий).
Например, перед удалением одной геометрии:
library(dplyr)
library(ggplot2)
count(mpg, class) %>%
mutate(pct=n/sum(n)) %>%
ggplot(aes(class, pct)) +
geom_col(fill="blue") +
geom_line(group=1) +
geom_point(size=4)
после удаления одной геометрии (обратите внимание, что ось y больше не начинается с 0, я думаю, что поведение по умолчанию для строки/точки без баров):
library(dplyr)
library(ggplot2)
count(mpg, class) %>%
mutate(pct=n/sum(n)) %>%
ggplot(aes(class, pct)) +
geom_col(fill="blue") +
geom_line(group=1) +
geom_point(size=4) -> p
p$layers[[1]] <- NULL
p
Любые способы заставить ggplot сохранить тот же самый макет?