ggplot2:带scale_colour_brewer的geom_smooth颜色

时间:2014-11-04 23:04:38

标签: r colors ggplot2 colorbrewer

我使用geom_smooth创建了一个简单的图形:

test.dat <- data.frame(matrix(c(runif(20, 0, 20)), 10, 2))
names(test.dat) <- c("x", "y")

test.plot <- ggplot(test.dat, aes(x,y)) + geom_point() + 
                    geom_smooth(method="loess")

生成的行默认为蓝色。我可以通过添加以下内容手动将其更改为给定的颜色:

test.plot + geom_smooth(method="loess", colour="black")

但是,我想将颜色选择基于我用于一系列绘图的调色板上。通常,这可以通过添加相应的行来实现:

scale_colour_brewer(type = "div", palette = "Spectral")

然而,这没有任何影响(也没有使用scale_fill_brewer)。我已经找到了一些关于geom_smooth行为的颜色here的讨论,但对这个特定问题没有明显的解决方法。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

您可以使用:

test.plot + 
  geom_smooth(aes(colour=TRUE), method="loess") + 
  scale_colour_brewer(type = "div", palette = "Spectral")

关键是在colour参数中使用mapping geom_smoothaes部分)。使用什么价值并不重要,它必须与您在图表中指定其他线条颜色所使用的任何其他值不同。

以下是一个更全面的例子:

set.seed(1)
test.dat <- data.frame(
  x=runif(20), y=runif(20), 
  z=sample(letters[1:2], 20, rep=T)
)

ggplot(test.dat, aes(x, y, colour=z)) + 
  geom_smooth(aes(colour="d"), method="loess") +
  geom_point() +
  geom_line() +
  scale_colour_brewer(type = "div", palette = "Spectral")

enter image description here

请注意我们如何通过向现有颜色值添加新的不同值(&#39; d&#39;)来让geom_smooth参与色标(&#39; a&#39;, &#39; b&#39)。 Ggplot收集分配给colour 美学映射的所有值(在本例中为unique(c(test.dat$z, "d"))),并将颜色标度中的颜色分配给它们。