如何将 RGB 值的向量转换为十六进制

How to convert vector of RGB values to Hex

我有一个 RGB 值的 CSV,即:

[1]230-000-070
[2]255-000-000
[3]204-077-242
...
...
(40 more rows)

我想将这些应用于 ggplot2 中栅格上的离散比例,它正在寻找十六进制代码而不是 RGB

scale_colour_manual(values = c("#E60046", "#FF0000", "#CC4DF2"))

我认为这个函数正是我所需要的 - 我该如何将它应用到向量中?

rgb2hex <- function(r,g,b) rgb(r, g, b, maxColorValue = 255)

您可以使用 strsplit 函数用 RGB 值拆分原始向量,然后在 strsplit 生成的列表上使用 do.call 应用 rgb2hex(输出是一个列表) .

# Input vector
RGB <- c("230-000-070", "255-000-000", "204-077-242")
# Function to apply
rgb2hex <- function(r, g, b) {rgb(r, g, b, maxColorValue = 255)}
# Split orignal vector and pass to rgb2hex with do.call as list
do.call(rgb2hex, strsplit(RGB, "-"))

你也可以这样做:

rgb2hex <- function(x) rgb(substr(x, 1, 3), substr(x, 5, 7), substr(x, 9, 11), maxColorValue = 255)

输出:

rgb2hex(rgb)

[1] "#E60046" "#FF0000" "#CC4DF2"

当您第一次读取 csv 时,最好将 r、g、b 值拆分到单独的列中,方法是将 - 指定为分隔符。此处使用 library(data.table) 进行演示,但您同样可以使用 read.csv 代替:

x = fread('my.csv', sep='-')
x[, rgb(V1,V2,V3, maxColorValue = 255)]

注意在示例数据上进行测试,可以使用:

x = fread("
230-000-070
255-000-000
204-077-242", sep='-')