我知道R
会自动加载一些调色板,例如palette
,rainbow
,heat.colors
和gray
。我也知道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
我公司的名字缩写是AT。
我希望能够通过名称而不是HEX或RGB来调用这些颜色,因为我不记得它们。理想情况下,我可以创建一个自动加载到R中的文件来启动这些颜色。
ATBlue <- #1A73BA
ATYellow <- #FFDB43
ATOrange <- #B54B05
然后,我可以调用颜色:
plot(x,y, col = "ATBlue")
我可以将值放入数据框中,然后像这样调用它们:
ATColors <- data.frame(name = c("ATBlue", "ATYellow", "ATOrange"), color= c("#1A73BA", "#F7D364", "#B54B05"))
plot(x,y, col = ATColors[3,2])
但我需要知道数据框中的位置才能正确调用它。
我可以创建一个元素,当R启动时会自动加载,这样我就可以将自定义颜色名称调用到图中吗?
答案 0 :(得分:13)
这回答(或至少是一个可能的答案)你的评论和编辑:
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)
使用rgb的定义方法允许您设置alpha级别,从而允许支持它的图形设备的透明度(至少:'pdf','windows','quartz'和'X11')。
您还可以命名'palette-vector'
palvec <- c(ATblue=ATblue, ATyellow=ATyellow, ATorange=ATorange)
可以使用数字或名称访问该向量:
plot(1,1) # to set up plot window
abline(h=c(0.8,1,1.2), col= palvec[ c( 'ATblue', 'ATyellow', 'ATorange' ) ] , lwd=40)
总的来说,我认为你会发现,如果你使用全部小写,那么基本和图形包(默认加载,因此不需要重命名)与gif-list会有很好的对应关系。所以它已经是R的一部分了。假设您想要找到“LavenderBlush”的R颜色名称。分配的颜色名称的向量是从colors()返回的,但它相当大,所以你可以用它来减少它:
grep("lavender", colors(), ignore.case=TRUE, value=TRUE)
#[1] "lavender" "lavenderblush" "lavenderblush1" "lavenderblush2"
# "lavenderblush3" "lavenderblush4"
并且说你想看看那个颜色的Hex代码是否与你不可读的gif表上的代码相同:
ccodes <- as.hexmode( c(256^(2:0) %*% col2rgb("lavenderblush")) )
ccodes
#[1] "fff0f5"
是的。而对于你的例子,只需使用“seagreen”:
> ccodes <- as.hexmode( c(256^(2:0) %*% col2rgb("seagreen")) )
> ccodes
[1] "2e8b57
如果您有十六进制代码值,则可以使用paste0
向其附加“#”:
paste0("#", ccodes)
#[1] "#2e8b57"
plot(1,1, col=paste0("#", ccodes) )
如果您有这样的值矢量,paste0
也会被矢量化:
ccodes <- as.hexmode( c(256^(2:0) %*% col2rgb(colors()[20:25])) )
paste0("#", ccodes)
#[1] "#ffe4c4" "#eed5b7" "#cdb79e" "#8b7d6b" "#000000" "#ffebcd"
答案 1 :(得分:2)
我会将颜色放在这样的命名向量中:
ATcols <- c(blue = "#1A73BA", yellow = "#FFDB43", orange = "#B54B05")
然后你就可以得到这样的蓝色:ATcols["blue"]
。
如果你想成为一个有点发烧友,你可以创建一个命名向量和一个函数:
AT_color_data <- c(blue = "#1A73BA", yellow = "#FFDB43", orange = "#B54B05")
ATcolor <- function(color="blue") {
if (is.numeric(color)) AT_color_data[color]
else AT_color_data[tolower(color)]
}
这为您提供了一些获取颜色的选项:
ATcolor(2:3)
# yellow orange
# "#FFDB43" "#B54B05"
ATcolor("orange")
# orange
# "#B54B05"
ATcolor(c("orange", "blue"))
# orange blue
# "#B54B05" "#1A73BA"
或者,在提供数字参数时,可以使函数的行为更像rainbow
:
AT_color_data <- c(blue = "#1A73BA", yellow = "#FFDB43", orange = "#B54B05")
ATcolor <- function(color="blue") {
if (is.numeric(color)) AT_color_data[1:color[1]]
else AT_color_data[tolower(color)]
}
然后,例如:
ATcolor(2)
# blue yellow
# "#1A73BA" "#FFDB43"
答案 2 :(得分:-2)
library("grDevices")
plot(1:20,pch=20,col=col)
col=colorRampPalette(c("white", "red"))(20)
M <- matrix(runif(100),10,10)
M[lower.tri(M)] <- NA
image(M,col = col,frame=F,xaxt="n",yaxt="n")