我注意到这里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)$data从cyl得到的颜色.
或者,您可以使用另一个调色板,如下所示:
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时,第二种颜色是不一样的.这是因为它产生均匀间隔色调的颜色.如果你要使用的颜色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)))
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差异的原因也很明显.我希望这有帮助.
添加到以前的答案:
使用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)