我有#0A68A6或#0A428C格式的颜色代码,依此类推。在R中有一种简单的方法可以将它们转换为长excel颜色代码(对于上面的例子10905600和9191946)?
答案 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个。十六进制A6
为10x16 + 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