Изменить цвет ggplot geom a posteriori (после указания другого цвета)
Функция из пакета возвращает ggplot с предустановленными цветами, которые я хотел бы изменить.
Например, давайте смоделируем этот график:
library(ggplot2)
df <- data.frame(x = rnorm(1000))
p <- ggplot(df, aes(x=x)) +
geom_density(fill="#2196F3")
p
Это заполненный синим график плотности.
Я хотел бы изменить его цвет апостериори.
Я пытался сделать:
p + scale_fill_manual(values=c("#4CAF50"))
p
Но это ничего не меняет.
Я также попробовал:
p <- p + geom_density(fill="black")
p
Но это добавляет слой поверх предыдущего, не меняя его.
Я также попытался покопаться в объекте ggplot, но там заблудился.
Есть ли удобный способ изменить свойства geom a posteriori?
Спасибо
2 ответа
Решение
Попробуй это:
#this is blue
p <- ggplot(df, aes(x=x)) +
geom_density(fill="#2196F3")
#convert to red
p$layers[[1]]$aes_params$fill <- 'red'
p
Цвет заливки сохраняется в p$layers[[1]]$aes_params$fill
и может быть изменен таким образом.
Как упоминал Роланд, я бы создал фиктивную переменную для fill
в aes()
затем измените цвета.
set.seed(111)
df <- data.frame(x = rnorm(1000),
dummy = "a", stringsAsFactors = FALSE)
p <- ggplot(df, aes(x=x, fill = dummy)) +
geom_density(show.legend = FALSE) +
scale_fill_manual(values = "#2196F3")
p2 <- ggplot(df, aes(x=x, fill = dummy)) +
geom_density(show.legend = FALSE) +
scale_fill_manual(values = "#4CAF50")