默认颜色是绕着色轮均匀分布的色调。您可以从这里查看其生成方式。
您可以使用这些颜色与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)
> ggplotColours(3)
如果您查看生成的两种颜色,则第一种相同,但是当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
ggplot_build(p2)$data[[1]]$fill
你会看到这些颜色是使用ggplotColours
生成的,差异的原因也很明显。希望这可以帮到你。