我该使用哪个函数来模拟ggplot2的默认颜色调色板,以获得所需数量的颜色。例如,输入3将生成一个带有这些颜色的十六进制颜色字符向量:
这只是围绕着彩色轮的等间距色调,从15开始:
gg_color_hue <- function(n) {
hues = seq(15, 375, length = n + 1)
hcl(h = hues, l = 65, c = 100)[1:n]
}
例如:n = 4
cols = gg_color_hue(n)
dev.new(width = 4, height = 4)
plot(1:n, pch = 16, cex = 2, col = cols)
seq
中有 length=n+1
,而我是 length=n
。 - Andriehcl(h = x) == hcl(x = x + 360)
,所以在代码中,hcl(hues, ...)
返回的第一个和第 n+1 个条目是相同的。在 hcl(hues, ...)[1:n]
中删除了第 n+1 个条目,因此您最终得到 n 个均匀间隔的色调。在代码中包含 n+1 值使代数变得更加整洁。 - Russ Hyde这些回答都非常好,但我想分享在stackoverflow上发现的另一件非常有用的事情,这是直接链接
基本上,@DidzisElferts展示了如何获取ggplot用于构建您创建的图表的所有颜色、坐标等。非常不错!
p <- ggplot(mpg,aes(x=class,fill=class)) + geom_bar()
ggplot_build(p)$data
[[1]]
fill y count x ndensity ncount density PANEL group ymin ymax xmin xmax
1 #F8766D 5 5 1 1 1 1.111111 1 1 0 5 0.55 1.45
2 #C49A00 47 47 2 1 1 1.111111 1 2 0 47 1.55 2.45
3 #53B400 41 41 3 1 1 1.111111 1 3 0 41 2.55 3.45
4 #00C094 11 11 4 1 1 1.111111 1 4 0 11 3.55 4.45
5 #00B6EB 33 33 5 1 1 1.111111 1 5 0 33 4.55 5.45
6 #A58AFF 35 35 6 1 1 1.111111 1 6 0 35 5.55 6.45
7 #FB61D7 62 62 7 1 1 1.111111 1 7 0 62 6.55 7.45
来源于Hadley Wickham所写的ggplot2书籍第106页:
默认的颜色方案scale_colour_hue会在hcl色彩环中均匀地选择色调。
通过一些逆向工程,你可以构建这个函数:
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)
}
展示这个在条形图中的示例:y <- 1:3
barplot(y, col = ggplotColours(n = 3))
hcl
会循环使用大于360的值。 - John Colbyscales:::show_col(ggplotColours(n=3))
来显示颜色及其对应的数值。 - Stat-R如果你想要获取十六进制值而不是图表,可以使用以下方法:
hue_pal()(3)
不要使用这段代码:
show_col(hue_pal()(3))
display.brewer.all()
的打印输出。我认为对于因素来说,我最喜欢Set1。 - John Colby