【问题标题】:Emulate ggplot2 default color palette模拟 ggplot2 默认调色板
【发布时间】:2012-01-02 02:39:19
【问题描述】:

我可以使用什么函数来模拟 ggplot2 的默认调色板以获得所需的颜色数量。例如,输入 3 将生成具有以下颜色的 HEX 颜色字符向量:

【问题讨论】:

  • 看秤包
  • 是的!我在办公桌上保留了一份display.brewer.all() 的打印输出。我认为我最喜欢 Set1 的因素。
  • 好主意!我将制作相同的打印输出。同意 Set1,我已经发现自己在大多数新图表中都使用了它。

标签: r ggplot2


【解决方案1】:

它只是围绕色轮等间距的色调,从 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)

【讨论】:

  • +1 我喜欢你的好、简单的解决方案,尽管我仍在试图理解为什么你在seq 中有length=n+1,而我有length=n
  • hcl(h = x) == hcl(x = x + 360),所以在代码中,hcl(hues, ...) 返回的第 1 个和第 n+1 个条目是相同的。第 n+1 个条目被丢弃在 hcl(hues, ...)[1:n] 中,因此您最终会得到 n 个均匀分布的色调。在代码中包含 n+1 值使代数更整洁
【解决方案2】:

这是来自

的结果
library(scales)
show_col(hue_pal()(4))

show_col(hue_pal()(3))

【讨论】:

  • 奇怪的是,颜色(至少在第二张图片中)与它们的 RGB 代码不匹配。但是,查看我在本地制作的图表,这些 RGB 代码正确的。
  • 可能是浏览器的问题?
  • 是的,很奇怪。在 Firefox 中,绿色是 #15ba3e,在 Chromium 中是 #00b83a,下载图像并在专用图像程序 (Gwenview) 中查看后,它是 #00b839。只有 Konqueror 将其正确显示为 #00ba38。所以只有一个是对的,没有一个是一致的!
  • 有什么方法可以获取颜色名称,例如'red2', 'blue3" ? 颜色代码,例如#00b83a,很难直观地使用。
  • 为了便于复制和粘贴,十六进制值为:#f8766d - 红色 #00ba38 - 绿色 #83b0fc - 蓝色
【解决方案3】:

这些答案都很好,但我想分享我在 stackoverflow 上发现的另一件事,它非常有用,这里是 direct link

基本上,@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

【讨论】:

    【解决方案4】:

    来自 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))
    

    【讨论】:

    • 比这更简单。您可以避免代数的第一行,因为尽管它不在帮助中,hcl 回收值 > 360。
    • 你甚至可以使用scales:::show_col(ggplotColours(n=3))来显示颜色和数值
    • 虽然我还没有弄清楚如何获得刻度及其 show_col 以吐出它绘制的(十六进制或任何其他格式)值......
    猜你喜欢
    • 1970-01-01
    • 2015-05-26
    • 2013-10-20
    • 2014-11-15
    • 1970-01-01
    • 2020-07-07
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多