我注意到这里Box 和胡须绘制了调用:
p + geom_boxplot(aes(fill = factor(cyl)))
为箱线图填充生成明亮的红色/绿色/蓝色,同时:
p + geom_boxplot(aes(fill = factor(vs)))
产生明显的淡绿色/红色颜色。在我的数据中,我得到了第二组颜色,但想要第一组(比如
p + geom_boxplot(aes(fill = factor(cyl)))
什么控制 ggplot 使用哪组颜色以及如何更改它?
我注意到这里Box 和胡须绘制了调用:
p + geom_boxplot(aes(fill = factor(cyl)))
为箱线图填充生成明亮的红色/绿色/蓝色,同时:
p + geom_boxplot(aes(fill = factor(vs)))
产生明显的淡绿色/红色颜色。在我的数据中,我得到了第二组颜色,但想要第一组(比如
p + geom_boxplot(aes(fill = factor(cyl)))
什么控制 ggplot 使用哪组颜色以及如何更改它?
默认颜色是围绕色轮均匀分布的色调。您可以从这里查看它是如何生成的。
您可以使用scale_fill_manual
这些颜色:
p + scale_fill_manual(values=c("#F8766D", "#00BA38"))
在这里,我用ggplot_build(p)$data
fromcyl
来获取颜色。
或者,您也可以使用另一个调色板,如下所示:
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 时,第一种颜色相同,但第二种颜色不同。这是因为它会生成均匀分布的色调颜色。如果你想使用 for 的颜色,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
差异的原因也很明显。我希望这有帮助。
你可以使用这些包:
#install.packages(pals)
#install.packages(reshape2)
require(pals)
require(reshape2)
在这里您可以找到一些示例离散调色板:
pal.bands(alphabet, alphabet2, cols25, glasbey, kelly, okabe, polychrome,
stepped, stepped2, stepped3, tol, watlington,
main="Discrete", show.names=FALSE)
你可以像这样应用它们:
p +
scale_fill_manual(values=as.vector(stepped3(20)))