模拟ggplot2默认调色板


191

我可以使用什么函数来模拟ggplot2的默认调色板以获得所需的颜色数量。例如,输入3将产生具有以下颜色的十六进制颜色的字符向量: 在此处输入图片说明


10
看一下秤包
hadley

2
是的 我display.brewer.all()在办公桌上打印了一份。我认为我最喜欢Set1的因素。
约翰·科尔比

好主意!我要进行相同的打印输出。同意Set1,我已经在大多数新图表中使用了它。
SFun28年

Answers:


263

从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)

在此处输入图片说明


2
+1我喜欢您不错的,简单的解决方案,尽管我仍然试图理解您为什么要length=n+1加入seq,而我却拥有length=n
Andrie

18
因为0 == 360
hadley

129

这是来自的结果

library(scales)
show_col(hue_pal()(4))

四色ggplot

show_col(hue_pal()(3))

三色ggplot


1
奇怪的是,这些颜色(至少在第二张图片中)与它们的RGB代码不匹配。但是,查看我在本地制作的图形,这些RGB代码正确的。
Sparhawk

1
也许是浏览器的东西?
Climbs_lika_Spyder

1
是的,很奇怪。在Firefox中,绿色是#15ba3e,在Chromium中是#00b83a,下载图像并在专用图像程序(Gwenview)中查看后,绿色是#00b839。只有Konqueror正确显示为#00ba38。所以只有一个是对的,没有一个是一致的!
Sparhawk

1
?有没有什么办法让颜色名称,如“RED2”,“blue3"颜色代码,例如#00b83a,很难直观地使用。
锡伯族江

2
为了便于复制和粘贴,十六进制值是:#f8766d-红色#00ba38-绿色#83b0fc-蓝色
pluke

62

这些答案都很好,但是我想分享我在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

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)
}

在barplot中进行演示:

y <- 1:3
barplot(y, col = ggplotColours(n = 3))

在此处输入图片说明


2
比这更简单。你能避免因为代数的第一线,虽然它不是在帮助,hcl回收价值> 360
约翰·科尔比

13
你甚至可以使用scales:::show_col(ggplotColours(n=3))显示的颜色和值
统计-R

尽管我还没有弄清楚如何获得刻度及其show_col来吐出它绘制的(十六进制或其他格式的值)...
Stefano
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.