如何提取R中单个命名颜色(如purple)对应的十六进制颜色代码?
获取R中命名颜色的十六进制代码
在使用ggplot2绘图时,手动指定调色板时混合了十六进制颜色和R内置命名颜色(如下方代码中的purple),但通过ggplot_build()或layer_data()等方法只能拿到原始的颜色名称,无法直接获取其对应的十六进制代码:
library(ggplot2) p <- ggplot(data = mtcars, aes(x = hp, y = "", fill = as.factor(gear)) )+ geom_boxplot()+ scale_fill_manual(values = c("#FF3300", "#006600", "purple"))
试过的无效方法
- 方案1:
ggplot_build(p)$data
- 方案2:
g <- ggplot_build(p) unique(g$data[[1]]["fill"])
- 方案3:
ld <- layer_data(last_plot()) (head(ld))
上述方法返回结果中,purple仍以名称形式存在:
# fill #1 #FF3300 #2 #006600 #3 purple
解决方法
要获取单个R命名颜色的十六进制代码,直接使用col2rgb()配合rgb()函数即可,无需通过绘图对象提取:
# 转换单个命名颜色 rgb(col2rgb("purple"), maxColorValue = 255)
运行后返回#990099,这就是purple对应的十六进制颜色代码。
如果需要批量转换混合了十六进制和命名颜色的调色板,可以编写简单函数处理:
convert_color <- function(color_vec) { sapply(color_vec, function(c) { if (grepl("^#", c)) { c } else { rgb(col2rgb(c), maxColorValue = 255) } }) } # 应用到示例调色板 palette <- c("#FF3300", "#006600", "purple") convert_color(palette)
返回结果:
#FF3300 #006600 purple "#FF3300" "#006600" "#990099"
内容的提问来源于stack exchange,提问作者johnjohn
相关产品推荐
相关产品推荐

