Изменить цвет 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")

Другие вопросы по тегам