R 中的 cm.colors() 是什么调色板?

What color palette is cm.colors() in R?

Base R (grDevices) 带有几个调色板函数,但是这些调色板的文档很差。我想知道 cm.colors() 函数映射到哪个调色板。

例如:

plot(x = mtcars[order(mtcars$wt), c("wt", "mpg")],
     col = cm.colors(length(mtcars$wt)),
     pch = 16, cex = 1.25)

这里是有根据的猜测。 cm 是 color map 的缩写”,(据我所知)本身是完全没有帮助的。 它是 cyan-magenta 的缩写。如果你看一下代码(这是以前的标准每当出现关于轻薄文档的投诉时,都会在 Rhelp 上做出响应)你会看到它实际上是 hsv 函数的包装器,具有特定端点的一系列颜色,这些颜色在“蓝色”的强度上没有变化。

> cm.colors
function (n, alpha, rev = FALSE) 
{
  if ((n <- as.integer(n[1L])) > 0L) {
    even.n <- n%%2L == 0L
    k <- n%/%2L
    l1 <- k + 1L - even.n
    l2 <- n - k + even.n
    cols <- c(if (l1 > 0L) hsv(h = 6/12, 
                               s = seq.int(0.5, 
                                           if (even.n) { 0.5/k} else{ 0}, 
                                           length.out = l1), 
                               v = 1, 
                               alpha = alpha), 
              if (l2 > 1) hsv(h = 10/12,
                              s = seq.int(0, 0.5, length.out = l2)[-1L], 
                              v = 1, alpha = alpha))
    if (rev) 
      rev(cols)
    else cols
  }
  else character()
}
<bytecode: 0x5572a94bc638>
<environment: namespace:grDevices>
> ?hsv

HSV Color Specification
Description
Create a vector of colors from vectors specifying hue, saturation and value.

所以我的预感是错误的,如下所述。

> cm.colors(2)
[1] "#80FFFF" "#FF80FF"
> col2rgb("cyan")
      [,1]
red      0
green  255
blue   255
> col2rgb("magenta")
      [,1]
red    255
green    0
blue   255

而且我怀疑 S/R 过去的图形人员认为我们应该知道这个颜色规范由什么组成或者我们会查找它:https://en.wikipedia.org/wiki/HSL_and_HSV