在R中转换颜色代码
我有#0A68A6或#0A428C格式的颜色代码,依此类推。 在R中有一个简单的方法将它们转换成长的Excel颜色代码(对于10905600和9191946以上的例子)?
使用col2rgb
并乘以总和:
> sum(col2rgb("#0A68A6") * c(1,256,256*256)) [1] 10905610 > sum(col2rgb("#0A428C") * c(1,256,256*256)) [1] 9191946
第一个例子,我得到了10905610而不是10905600,你是否犯了一个错字?
如果您有一个颜色代码vector,请沿第二个维度应用总和:
> 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
将hex颜色string分解为十进制数字matrix,每行一列,红色,绿色和蓝色行。 这里两种颜色都以#0A
开始,十进制是hex,所以第一行是二十。 第一个hex42
是4 * 16 + 2 = 66,所以这个颜色有一个绿色的66。 hexA6
是10x16 + 6
= 166,所以第二个颜色的十进制蓝色分量是166:
> col2rgb(c("#0A428C","#0A68A6")) [,1] [,2] red 10 10 green 66 104 blue 140 166
向量乘以一个matrix的方式按列方式工作,所以我们将红色乘以1,将绿色乘以256,将蓝色乘以256 * 256,如下所示:
> col2rgb(c("#0A428C","#0A68A6")) * c(1, 256, 256*256) [,1] [,2] red 10 10 green 16896 26624 blue 9175040 10878976
现在,hex颜色的excel颜色代码是列的总和:
> apply(col2rgb(c("#0A428C","#0A68A6")) * c(1, 256, 256*256), 2, sum) [1] 9191946 10905610