R中的CMY色函数

R中的CMY色函数,r,R,在任何R包中是否有相当于rgb()的函数?在{base}或例如{colorspace}中似乎没有任何内容。我有一个自定义功能,可以在这里发布,但最好是本地功能。是的,有一种方法可以使用CMYK颜色而不是RGB进行打印。如果将colormodel设置为CMYK,则可以使用CMYK颜色 阅读有关这方面的详细信息和一个示例如果您对代码移植感兴趣,我发现了两种主要的可能性: (尽管名称不同,但描述上写着“CMYK to Lab” 编辑:如果您想反转hrbmstr的代码,这里有一些javascript

在任何R包中是否有相当于
rgb()
的函数?在{base}或例如{colorspace}中似乎没有任何内容。我有一个自定义功能,可以在这里发布,但最好是本地功能。

是的,有一种方法可以使用CMYK颜色而不是RGB进行打印。如果将
colormodel
设置为CMYK,则可以使用CMYK颜色


阅读有关这方面的详细信息和一个示例

如果您对代码移植感兴趣,我发现了两种主要的可能性:

(尽管名称不同,但描述上写着“CMYK to Lab”

编辑:如果您想反转hrbmstr的代码,这里有一些javascript,可以很容易地转换为R(出于以下原因):

这应该行得通

#' assumes integer input for CMYK
cmyk <- function(C,M,Y,K) {

  C <- C / 100.0
  M <- M / 100.0
  Y <- Y / 100.0
  K <- K / 100.0

  n.c <- (C * (1-K) + K)
  n.m <- (M * (1-K) + K)  
  n.y <- (Y * (1-K) + K)

  r.col <- ceiling(255 * (1-n.c))
  g.col <- ceiling(255 * (1-n.m))
  b.col <- ceiling(255 * (1-n.y))

  return(col2rgb(sprintf("#%02s%02s%02s",
                     as.hexmode(r.col), 
                     as.hexmode(g.col), 
                     as.hexmode(b.col))))

}

> cmyk(0,50,85,0)
      [,1]
red    255
green  128
blue    39

> cmyk(0,0,100,0)
      [,1]
red    255
green  255
blue     0
#“假定CMYK为整数输入

cmyk除了@hrbrmstr的函数之外,这里还有我的函数。据我所知,我没有考虑到黑色主要用于打印,但我认为这主要是一个dataviz工具。它应该适用于向量/矩阵/字母

cmy = function(c, m, y, alpha, maxColorValue=1){
  if(maxColorValue != 1) { c <- c/maxColorValue; m <- m/maxColorValue; y <- y/maxColorValue }
  c <- 1-c; m <- 1-m; y <- 1-y
  hex <- function(v) substring(rgb(v,0,0),2,3)
  if(!missing(alpha)) alpha <- hex(alpha) else alpha <- ''
  paste0('#',hex(c), hex(m), hex(y), alpha)
}
cmy=函数(c,m,y,alpha,maxColorValue=1){

if(maxColorValue!=1){c
library(sos);findFn(“cmyk”)
没有发现任何有用的东西,因此它可能不存在。令人惊讶。我编写了一个函数
XYZ2lab
,如果这有帮助的话。我知道这不是您要求的颜色空间,但请告诉我,我会发电子邮件或将其作为答案发布。是的,我看到了该页面。但除非我遗漏了什么,否则它只指定了输出文件的颜色空间。这是不是一个可以在R中使用的函数,用于将变量映射到青色、洋红或黄色通道,并返回例如十六进制颜色字符串。@geotheory根据我所知,遗憾的是,您不能这样做。您可以使用自己的函数将RGB映射到CMYK,反之亦然。我假设您正在使用CMYK进行打印,以缩小色域。实际上,我只是在尝试创建ate数据可视化使用rgb的替代方案:)让我们看看是否有其他人知道解决方案。或者,您可以只敲除法并以十进制格式指定CMYK百分比。可以进行cld的一些其他优化,但它完成了任务:-)
cmy = function(c, m, y, alpha, maxColorValue=1){
  if(maxColorValue != 1) { c <- c/maxColorValue; m <- m/maxColorValue; y <- y/maxColorValue }
  c <- 1-c; m <- 1-m; y <- 1-y
  hex <- function(v) substring(rgb(v,0,0),2,3)
  if(!missing(alpha)) alpha <- hex(alpha) else alpha <- ''
  paste0('#',hex(c), hex(m), hex(y), alpha)
}