改变ggplot因子颜色?

30 visualization r ggplot2

我注意到这里Box和胡须策划了这个电话:

p + geom_boxplot(aes(fill = factor(cyl)))
Run Code Online (Sandbox Code Playgroud)

为箱形图填充生成明亮的红色/绿色/蓝色,同时:

p + geom_boxplot(aes(fill = factor(vs)))
Run Code Online (Sandbox Code Playgroud)

产生明显的淡绿色/红色.在我的数据中,我得到了第二组颜色,但是想要第一组颜色(比如

p + geom_boxplot(aes(fill = factor(cyl)))
Run Code Online (Sandbox Code Playgroud)

什么控制ggplot使用哪种颜色,你如何改变它?

谢谢

Aru*_*run 40

默认颜色是色轮周围均匀分布的色调.您可以从这里查看这是如何生成的.

您可以使用scale_fill_manual这些颜色:

p + scale_fill_manual(values=c("#F8766D", "#00BA38"))
Run Code Online (Sandbox Code Playgroud)

在这里,我用ggplot_build(p)$datacyl得到的颜色.

或者,您可以使用另一个调色板,如下所示:

p + scale_fill_brewer(palette="Set1")
Run Code Online (Sandbox Code Playgroud)

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

require(RColorBrewer)
brewer.pal(9, "Set1")
Run Code Online (Sandbox Code Playgroud)

如果您有兴趣,请查看包裹以了解调色板和其他选项.

编辑: @ 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"
Run Code Online (Sandbox Code Playgroud)

如果你看一下生成的两种颜色,第一种颜色是相同的,但是当n = 2且n = 3时,第二种颜色是不一样的.这是因为它产生均匀间隔色调的颜色.如果你要使用的颜色cylvs,那么你就必须设置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)))
Run Code Online (Sandbox Code Playgroud)

现在,如果你这样做:

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

ggplot_build(p2)$data[[1]]$fill
# [1] "#F8766D" "#00BFC4" "#F8766D" "#00BFC4" "#F8766D"
Run Code Online (Sandbox Code Playgroud)

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

  • 但这并不能解释为什么将一个变量绘制为一个因子,您得到一组颜色,而对于不同的一个,您会得到另一组颜色,就像我链接到的doc页面一样.颜色是均匀的间隔,我可以看到,但为什么两者之间有所不同?我希望它看起来像第一个而不是第二个. (2认同)

Meg*_*ron 8

添加到以前的答案:

使用col美学(而不是fill)时,请使用scale_color_manual.这对以下内容很有用geom_point():

myColors <- c("#56ddc5", "#ff3db7", "#4699dd")
ggplot(mtcars, aes(x=mpg, y=hp, col=as.factor(cyl))) + 
  geom_point() +
  scale_color_manual(values=myColors)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述