关于r:更改ggplot因子颜色?

changing ggplot factor colors?

我注意到在这里Box和胡须绘制了电话:

1
p + geom_boxplot(aes(fill = factor(cyl)))

生成明亮的红色/绿色/蓝色用于箱形图填充,而:

1
p + geom_boxplot(aes(fill = factor(vs)))

产生鲜明的浅绿色/红色。 在我的数据中,我得到了第二组颜色,但是想要第一组颜色(例如

1
p + geom_boxplot(aes(fill = factor(cyl)))

什么控制ggplot使用哪种颜色以及如何更改它?

谢谢


默认颜色是色轮周围均匀分布的色调。您可以从此处检查如何生成。

您可以将scale_fill_manual与这些颜色一起使用:

1
p + scale_fill_manual(values=c("#F8766D","#00BA38"))

在这里,我使用了cyl中的ggplot_build(p)$data来获取颜色。

另外,您也可以使用其他调色板:

1
p + scale_fill_brewer(palette="Set1")

要找到调色板中的颜色,您可以执行以下操作:

1
2
require(RColorBrewer)
brewer.pal(9,"Set1")

如果您有兴趣,请检查包装以了解调色板和其他选项。

编辑:@ user248237dfsf,正如我已经在顶部的链接中指出的那样,来自@Andrie的此函数显示生成的颜色:

1
2
3
4
5
6
7
8
9
10
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时生成的这些颜色。

要验证这确实是事实,您可以执行以下操作:

1
2
3
4
5
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)))

现在,如果您这样做:

1
2
3
4
5
ggplot_build(p1)$data[[1]]$fill
# [1]"#F8766D""#00BA38""#619CFF"

ggplot_build(p2)$data[[1]]$fill
# [1]"#F8766D""#00BFC4""#F8766D""#00BFC4""#F8766D"

您会看到这些是使用ggplotColours生成的颜色,并且差异的原因也很明显。我希望这有帮助。


添加到以前的答案:

使用col美学效果(而不是fill)时,请使用scale_color_manual。这对于geom_point()很有用:

1
2
3
4
myColors <- c("#56ddc5","#ff3db7","#4699dd")
ggplot(mtcars, aes(x=mpg, y=hp, col=as.factor(cyl))) +
  geom_point() +
  scale_color_manual(values=myColors)

enter image description here