从命名列表或矢量创建调色板功能?

Jak*_*uss 5 r ggplot2

我有一个已知的九种颜色宇宙,我想用它来创建用户定义的带有函数的调色板。

col_universe <- list(dark_blue = "#034772", med_blue = "#2888BC", 
light_blue = "#73B7CE", green = "#699D46", orange = "#EA8936", gold = "#F9C347", 
dark_grey = "#58595B", medium_grey = "#7D7E81",light_grey = "#C1C2C4")
Run Code Online (Sandbox Code Playgroud)

我想做的是按名称创建任意长度的调色板。

custom_colors <- function(color1, color2, color3, ..., color9)
Run Code Online (Sandbox Code Playgroud)

那么我会像下面这样使用它,

pal1 <- custom_colors(dark_blue, green, gold)

pal2 <- custom_colors(gold, orange, light_grey, dark_grey)
Run Code Online (Sandbox Code Playgroud)

我希望pal1pal2成为字符向量(将提供给 ggplot2)

c("#034772", "#699D46", "#F9C347")
c("#F9C347", "#EA8936", "#C1C2C4", "#58595B")
Run Code Online (Sandbox Code Playgroud)

Psi*_*dom 3

用于match.call捕获参数:

custom_colors <- function(...) {
    cl = match.call(expand.dots = TRUE)
    sapply(cl[-1], function(col) col_universe[[as.character(col)]])
}

custom_colors(dark_blue, green, gold)
[1] "#034772" "#699D46" "#F9C347"

custom_colors(gold, orange, light_grey, dark_grey)
[1] "#F9C347" "#EA8936" "#C1C2C4" "#58595B"
Run Code Online (Sandbox Code Playgroud)

数据

col_universe <- list(dark_blue = "#034772", med_blue = "#2888BC", 
light_blue = "#73B7CE", green = "#699D46", orange = "#EA8936", gold = "#F9C347", 
dark_grey = "#58595B", medium_grey = "#7D7E81",light_grey = "#C1C2C4")
Run Code Online (Sandbox Code Playgroud)