更改后面的ggplot geom的颜色(在指定了另一种颜色之后)

时间:2018-01-11 14:10:45

标签: r plot ggplot2

包中的函数返回一个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属性?

由于

2 个答案:

答案 0 :(得分:3)

试试这个:

#this is blue
p <- ggplot(df, aes(x=x)) +
  geom_density(fill="#2196F3")

#convert to red
p$layers[[1]]$aes_params$fill <-  'red'
p

enter image description here

填充颜色保存在p$layers[[1]]$aes_params$fill中,可以通过这种方式进行修改。

答案 1 :(得分:2)

正如Roland所说,我会在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")

enter image description here

p2 <- ggplot(df, aes(x=x, fill = dummy)) +
      geom_density(show.legend = FALSE) +
      scale_fill_manual(values = "#4CAF50")

enter image description here