转换R中的颜色代码

时间:2014-08-05 14:18:14

标签: r excel rgb

我有#0A68A6或#0A428C格式的颜色代码,依此类推。在R中有一种简单的方法可以将它们转换为长excel颜色代码(对于上面的例子10905600和9191946)?

1 个答案:

答案 0 :(得分:2)

使用col2rgb并乘以和:

> sum(col2rgb("#0A68A6") * c(1,256,256*256))
[1] 10905610
> sum(col2rgb("#0A428C") * c(1,256,256*256))
[1] 9191946

对于第一个例子,我得到的是10905610而不是10905600,你输错了吗?

如果您有颜色代码矢量,请沿第二维应用总和:

> apply(col2rgb(c("#0A428C","#0A68A6")) * c(1,256,256*256), 2, sum)
[1]  9191946 10905610

Spose我应该将此链接归功于如何定义长颜色代码编号:

http://www.garybeene.com/code/visual%20basic168.htm

对于说明性澄清,这里的内容分为几部分:

col2rgb将十六进制颜色字符串分成十进制数字矩阵,每行颜色一列,红色,绿色和蓝色行。这两种颜色都以#0A开头,十进制为10,所以第1行是两十。第一个中的十六进制42是4 * 16 + 2 = 66,因此该颜色的绿色行中有66个。十六进制A610x16 + 6 = 166,因此第二种颜色的十进制蓝色成分为166:

> col2rgb(c("#0A428C","#0A68A6"))
      [,1] [,2]
red     10   10
green   66  104
blue   140  166

将矩阵乘以矢量按列工作,因此我们将红色乘以1,将绿色乘以256,将蓝色乘以256 * 256,如下所示:

> col2rgb(c("#0A428C","#0A68A6")) * c(1, 256, 256*256)
         [,1]     [,2]
red        10       10
green   16896    26624
blue  9175040 10878976

现在,十六进制颜色的Excel颜色代码是列的总和:

> apply(col2rgb(c("#0A428C","#0A68A6")) * c(1, 256, 256*256), 2, sum)
[1]  9191946 10905610