2012-08-11 25 views
9

Ich weiß, dass R automatisch mit einigen Farbpaletten geladen wird, wie palette, rainbow, heat.colors und gray. Ich kenne auch RColorBrewer. Aber was, wenn ich eine benutzerdefinierte Farbpalette verwenden und Farben nach Namen zuweisen möchte? Ist das möglich?Erstellen Sie eine benutzerdefinierte Farbpalette in R

Meine Firma Farbpalette ist wie folgt:

#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 

Initialen meines Unternehmens sind AT.

Ich würde gerne diese Farben über einen Namen anstatt über die HEX oder RGB aufrufen, weil ich mich nicht an sie erinnere. Im Idealfall könnte ich eine Datei erstellen, die automatisch in R geladen würde, die diese Farben initiieren würde.

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

Dann konnte ich die Farben nennen:

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

ich die Werte in einen Datenrahmen setzen könnte, sie rufen Sie dann etwa so:

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

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

Aber ich würde wissen müssen die Position im Datenrahmen, um sie korrekt aufzurufen.

Kann ich ein Element erstellen, das beim Start von R automatisch geladen wird, sodass ich einen benutzerdefinierten Farbnamen in einem Diagramm aufrufen kann?

Antwort

11

Diese Antworten (oder zumindest ist eine mögliche Antwort auf) Ihre Kommentare und Bearbeitungen:

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) 

Die Definition Methode mit rgb ermöglicht es Ihnen, eine Alpha-Ebene zu setzen, damit die Transparenz auf grafische Geräten ermöglicht, die es unterstützen (mindestens: 'pdf', 'windows', 'quarz' und 'X11').

können Sie nennen auch einen ‚Palette-Vektor‘

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

Das Vektor mit entweder Zahlen oder Namen zugegriffen werden kann:

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

Generell denke ich, Sie werden feststellen, dass Wenn Sie alle Kleinbuchstaben verwenden, wird eine gute Übereinstimmung für die Basis- und Grafikpakete (standardmäßig geladen, so dass kein Umbenennen erforderlich ist) mit dieser GIF-Liste bestehen. Also ist es schon ein Teil von R. Nehmen wir an, Sie wollten den Namen der R-Farbe von "LavenderBlush" finden. Der Vektor der zugeordneten Farbnamen von Farben() zurückgegeben wird, aber es ist ziemlich groß, so können Sie whittle es nach unten mit:

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

Und sagen Sie, ob der Hex-Code für diese Farbe sehen wollen, wie die gleich waren eine auf Ihrem unlesbaren gif Tabelle:

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

Yep.Und für Ihr Beispiel verwenden nur „seagreen“:

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

Wenn Sie einen Hex-Code-Wert haben, können Sie „#“, um es mit paste0 anhängen:

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

Wenn Sie einen Vektor von solchen haben Werte werden paste0 auch vektorisiert:

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

ich die Frage aktualisiert, um ein bisschen mehr klar zu sein. Ich habe dieses Gif nur als Beispiel benutzt. Idealerweise würde ich die Farben meiner Firma nehmen und eine Palette daraus machen, also wären es 10 Farben oder nicht 200 oder was auch immer es war. Ich habe versucht, was Sie vorgeschlagen haben, und dann die Handlung erneut gemacht. 'plot (x, y, col =" ccodes ")', was folgendes liefert: 'Fehler in plot.xy (xy, type, ...): ungültiger Farbname 'ccodes''. Das funktioniert aber: 'plot (x, y, col =" # 2e8b57 ")'. Gibt es keine Möglichkeit, Ccodes in diesem Beispiel zu verwenden? Danke – mikebmassey

+0

So hätte Plot (x, y, col = "seagreen"). –

+0

'paste0 (" # ", ccodes) -> ccodes' dann können Sie es in Ihrem Plot aufrufen, solange Sie die Anführungszeichen löschen:' plot (x, y, col = ccodes) ' – plannapus

2

ich die Farben in einem benannten Vektor so sagen würde:

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

Dann können Sie sagen, blau wie folgt: ATcols["blue"].

Wenn Sie ein bisschen schicker sein wollen, können Sie einen benannten Vektor und eine Funktion erstellen:

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

Dies gibt Ihnen ein paar Optionen für die Farben bekommen:

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

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

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

Alternativ Sie könnten Ihre Funktion ein bisschen wie rainbow verhalten, wenn Sie ein numerisches Argument zur Verfügung stellen:

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

dann zum Beispiel:

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

können Sie nicht einfach einen benannten Vektor verwenden? dann könntest du ein paar 'unlist'-Anweisungen überspringen und einfach' ATcolor <- function (x) AT_color_data [x] '(glaube ich) verwenden –

+0

Guter Punkt. Ich werde bearbeiten. – 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") 
Verwandte Themen