默认的颜色间隔均匀的色调在色轮上你可以检查这是如何从here产生
您可以使用scale_fill_manual
与那些颜色:。
p + scale_fill_manual(values=c("#F8766D", "#00BA38"))
在这里,我用ggplot_build(p)$data
从cyl
得到的颜色。
或者,也可以使用其他的调色板以及像这样:
p + scale_fill_brewer(palette="Set1")
,并找到在调色板上的颜色,你可以这样做:
require(RColorBrewer)
brewer.pal(9, "Set1")
检查包装是否知道调色板和其他选项,如果你有兴趣。
编辑: @ user248237dfsf,因为我已经在在顶部的链接中指出,从@Andrie此功能显示的颜色产生:
ggplotColours <- function(n=6, h=c(0, 360) +15){
if ((diff(h)%%360) < 1) h[2] <- h[2] - 360/n
hcl(h = (seq(h[1], h[2], length = n)), c = 100, l = 65)
}
> ggplotColours(2)
# [1] "#F8766D" "#00BFC4"
> ggplotColours(3)
# [1] "#F8766D" "#00BA38" "#619CFF"
如果你看一下产生的两种颜色,第一个是相同的,但第二个颜色不一样,当n = 2和n = 3时。这是因为它产生颜色均匀间隔色调。如果你想使用cyl
的颜色作为vs
,那么你必须设置scale_fill_manual
并使用这个函数生成n = 3的颜色。
要验证这确实是发生了什么事,你可以这样做:
p1 <- ggplot(mtcars, aes(factor(cyl), mpg)) +
geom_boxplot(aes(fill = factor(cyl)))
p2 <- ggplot(mtcars, aes(factor(cyl), mpg)) +
geom_boxplot(aes(fill = factor(vs)))
现在,如果你这样做:
ggplot_build(p1)$data[[1]]$fill
# [1] "#F8766D" "#00BA38" "#619CFF"
ggplot_build(p2)$data[[1]]$fill
# [1] "#F8766D" "#00BFC4" "#F8766D" "#00BFC4" "#F8766D"
你看,这些都是正在使用ggplotColours
和产生的颜色差异的原因也很明显。我希望这有帮助。
但是,这并不能解释为什么一个变量绘成因素你得到一组颜色,并为不同的一个你会得到另一套颜色像我链接到的文档页面。颜色间隔均匀,我可以看到,但为什么它们之间有所不同?我希望它看起来像第一个不是第二个。 – user248237dfsf 2013-02-28 13:35:40
能够手动设置色相轮上每种颜色之间的步距将会很好。这样我们可以在连续因素之间获得更大的对比。在360之后,它应该从0开始继续。 – JohannesNE 2015-05-28 10:51:29