我使用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的讨论,但对这个特定问题没有明显的解决方法。有什么建议吗?
答案 0 :(得分:3)
您可以使用:
test.plot +
geom_smooth(aes(colour=TRUE), method="loess") +
scale_colour_brewer(type = "div", palette = "Spectral")
关键是在colour
参数中使用mapping
geom_smooth
(aes
部分)。使用什么价值并不重要,它必须与您在图表中指定其他线条颜色所使用的任何其他值不同。
以下是一个更全面的例子:
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")
请注意我们如何通过向现有颜色值添加新的不同值(&#39; d&#39;)来让geom_smooth
参与色标(&#39; a&#39;, &#39; b&#39)。 Ggplot收集分配给colour
美学映射的所有值(在本例中为unique(c(test.dat$z, "d"))
),并将颜色标度中的颜色分配给它们。