在R中创建自定义调色板

mik*_*sey 10 r colors

我知道,R装有自动一些调色板,如palette,rainbow,heat.colorsgray.我也知道RColorBrewer.但是,如果我想使用自定义调色板并按名称指定颜色,该怎么办?那可能吗?

我公司的调色板如下:

#1A73BA (R: 26 G: 115 B: 186) - this is a blue
#FFDB43 (R:255 G:219 B:67) - this is a yellow
#B54B05 (R:181 G:75 B:5) - this is an orange
Run Code Online (Sandbox Code Playgroud)

我公司的名字缩写是AT.

我希望能够通过名称而不是HEX或RGB来调用这些颜色,因为我不记得它们.理想情况下,我可以创建一个自动加载到R中的文件来启动这些颜色.

ATBlue <- #1A73BA
ATYellow <- #FFDB43
ATOrange <- #B54B05
Run Code Online (Sandbox Code Playgroud)

然后,我可以调用颜色:

plot(x,y, col = "ATBlue")
Run Code Online (Sandbox Code Playgroud)

我可以将值放入数据帧,然后像这样调用它们:

ATColors <- data.frame(name = c("ATBlue", "ATYellow", "ATOrange"), color= c("#1A73BA", "#F7D364", "#B54B05"))

plot(x,y, col = ATColors[3,2])
Run Code Online (Sandbox Code Playgroud)

但我需要知道数据框中的位置才能正确调用它.

我可以创建一个元素,当R启动时会自动加载,这样我就可以将自定义颜色名称调用到图中吗?

42-*_*42- 14

这回答(或至少是一个可能的答案)您的评论和编辑:

ATblue <- rgb(26/255, 115/255, 186/255, 1)
 ATyellow <- rgb(255/255, 219/255, 67/255, 1)
 ATorange <- rgb(181/255, 75/255, 5/255, 1)

 plot(1:10, col= c(ATblue, ATyellow, ATorange), pch=20)
Run Code Online (Sandbox Code Playgroud)

使用rgb的定义方法允许您设置alpha级别,从而允许支持它的图形设备的透明度(至少:'pdf','windows','quartz'和'X11').

你也可以命名'palette-vector'

palvec <-  c(ATblue=ATblue, ATyellow=ATyellow, ATorange=ATorange)
Run Code Online (Sandbox Code Playgroud)

可以使用数字或名称访问该向量:

plot(1,1) # to set up plot window
abline(h=c(0.8,1,1.2), col= palvec[ c( 'ATblue', 'ATyellow', 'ATorange' ) ] , lwd=40)
Run Code Online (Sandbox Code Playgroud)

一般来说,我认为你会发现,如果你使用全部小写,那么基本和图形包(默认加载,因此不需要重命名)与gif-list会有很好的对应关系.所以它已经是R的一部分了.假设您想要找到"LavenderBlush"的R颜色名称.分配的颜色名称的向量是从colors()返回的,但它相当大,所以你可以用以下方法减少它:

grep("lavender", colors(), ignore.case=TRUE, value=TRUE)
#[1] "lavender"       "lavenderblush"  "lavenderblush1" "lavenderblush2" 
#     "lavenderblush3" "lavenderblush4"
Run Code Online (Sandbox Code Playgroud)

并且说你想看看那个颜色的Hex代码是否与你不可读的gif表上的代码相同:

 ccodes <- as.hexmode( c(256^(2:0) %*% col2rgb("lavenderblush")) )
 ccodes
 #[1] "fff0f5"
Run Code Online (Sandbox Code Playgroud)

是的.而对于你的例子,只需使用"seagreen":

> ccodes <- as.hexmode( c(256^(2:0) %*% col2rgb("seagreen")) )
> ccodes
[1] "2e8b57
Run Code Online (Sandbox Code Playgroud)

如果你有一个十六进制代码值,你可以用它附加"#" paste0:

 paste0("#", ccodes)
#[1] "#2e8b57"
 plot(1,1, col=paste0("#", ccodes) )
Run Code Online (Sandbox Code Playgroud)

如果你有这样的值的向量,paste0也是矢量化:

 ccodes <- as.hexmode( c(256^(2:0) %*% col2rgb(colors()[20:25])) )
 paste0("#", ccodes)
#[1] "#ffe4c4" "#eed5b7" "#cdb79e" "#8b7d6b" "#000000" "#ffebcd"
Run Code Online (Sandbox Code Playgroud)