2012-08-11 12 views
9

Sé que R se carga con algunas paletas de colores de forma automática, como palette, rainbow, y heat.colorsgray. También sé de RColorBrewer. Pero, ¿y si quiero usar una paleta de colores personalizada y asignar colores por nombre? ¿Es eso posible? paleta de coloresCrear una paleta de colores personalizada en I

Mi compañía es el siguiente: las iniciales

#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 

Mi de la empresa son AT.

Me gustaría poder llamar esos colores a través de un nombre en lugar de HEX o RGB porque no los recuerdo. Idealmente, podría crear un archivo que se cargaría automáticamente en R que iniciará estos colores.

ATBlue <- #1A73BA 
ATYellow <- #FFDB43 
ATOrange <- #B54B05 

Entonces, podría llamar a los colores:

plot(x,y, col = "ATBlue") 

que podría poner los valores en una trama de datos, entonces llamarlos así:

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

plot(x,y, col = ATColors[3,2]) 

Pero yo tendría que saber la ubicación en el marco de datos para llamarlo correctamente.

¿Puedo crear un elemento que se cargue automáticamente cuando se inicie R que me permita llamar un nombre de color personalizado en un diagrama?

Respuesta

11

Este respuestas (o por lo menos es una posible respuesta a) sus comentarios y ediciones:

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) 

El método de definición con RGB le permite establecer un nivel alfa, permitiendo así la transparencia en los dispositivos gráficos que lo soportan (como mínimo: 'pdf', 'windows', 'quartz' y 'X11').

También puede nombrar 'paleta de vector'

palvec <- c(ATblue=ATblue, ATyellow=ATyellow, ATorange=ATorange) 

que el vector se podía acceder con números o nombres:

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

En general creo que usted encontrará que si usa todas las minúsculas, habrá una buena correspondencia para la base y los paquetes de gráficos (cargados de forma predeterminada, por lo que no será necesario cambiar el nombre) con esa lista de gif. Entonces ya es parte de R. Supongamos que quiere encontrar el nombre de color R de "LavenderBlush". El vector de nombres de colores asignados se volvió de colores() pero es bastante grande, por lo que puede reducir gradualmente hacia abajo con:

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

Y decir que quería ver si el código hexadecimal para ese color eran los mismos que el uno en su tabla gif ilegible:

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

Yep.Y por su ejemplo sólo tiene que utilizar "verde mar":

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

Si usted tiene un valor hexadecimal de código se puede añadir "#" para con paste0:

paste0("#", ccodes) 
#[1] "#2e8b57" 
plot(1,1, col=paste0("#", ccodes)) 

Si usted tiene un vector de tales valores, paste0 también se vectorizados:

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

He actualizado la cuestión a ser un poco más claro. Solo estaba usando ese gif como ejemplo. Idealmente, tomaría los colores de mi empresa y haría una paleta con ella, por lo que serían 10 colores más o menos, no 200 o lo que sea. Probé con lo que sugeriste, y luego hice la trama de nuevo. 'plot (x, y, col =" ccodes ")', que devuelve esto: 'Error en plot.xy (xy, type, ...): nombre de color no válido 'ccodes''. Sin embargo, esto funciona: 'plot (x, y, col =" # 2e8b57 ")'. ¿No hay una forma de que los ccodes funcionen en ese ejemplo? Gracias – mikebmassey

+0

Como tendría el diagrama (x, y, col = "seagreen"). –

+0

'paste0 (" # ", ccodes) -> ccodes' entonces puede usarlo en su llamada de trazado siempre que suelte las comillas:' plot (x, y, col = ccodes) ' – plannapus

2

yo pondría los colores en un vector llamado así:

ATcols <- c(blue = "#1A73BA", yellow = "#FFDB43", orange = "#B54B05") 

A continuación, puede obtener, por ejemplo, azul como este: ATcols["blue"].

Si quieres ser un poco más elegante, puede crear un vector llamado y una función:

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)] 
} 

Esto le da algunas opciones para conseguir sus colores:

ATcolor(2:3) 
# yellow orange 
# "#FFDB43" "#B54B05" 

ATcolor("orange") 
# orange 
# "#B54B05" 

ATcolor(c("orange", "blue")) 
# orange  blue 
# "#B54B05" "#1A73BA" 

Alternativamente, puede hacer que su función se comporte un poco más como rainbow al proporcionar un argumento numérico:

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)] 
} 

entonces, por ejemplo:

ATcolor(2) 
#  blue yellow 
# "#1A73BA" "#FFDB43" 
+1

¿no puedes simplemente usar un vector con nombre? entonces podría omitir algunas declaraciones 'unlist', y simplemente usar' ATcolor <- function (x) AT_color_data [x] '(creo) –

+0

Buen punto. Voy a editar – seancarmody

0
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") 
Cuestiones relacionadas