2016-05-23 6 views
2

ich mit der Frage beginnen: Gibt es eine Möglichkeit, eine Funktion zu erstellen, sagen ggColors, die aus dem Paket ggplot2 mehr anderen Funktionen wickeln? Diese Funktion sollte addiert sich mit ggplot Objekt Operator + (und nicht %>% Operator), wie in diesem Beispiel:Wrap mehr ggplot2 Funktionen und verwenden Sie den Wrapper mit Operator „+“ in R

p <- ggplot(mtcars, aes(hp,disp, color = as.factor(cyl))) + geom_point() 
p + ggColors() 

Wo ggColors so etwas wie dies sein sollte:

ggColors <- function(values = NULL, name = NULL, cold.colors = TRUE) { 
    # Some conditions: 
    if (is.null(values)){ 
     if (cold.colors) { 
      values <- c("darkblue","blue", "green") 
     } else { 
      values <- c("red","orange", "yellow") 
     } 
    }  
    # Modified default values of `ggplot2` functions: 
    scale_color_manual(name = name, values = values) + 
    scale_fill_manual (name = name, values = values) 
} 

Das Problem ist, dass scale_color_manual und scale_fill_manual nicht addieren, da sie ggplot Objekt in der Funktion ggColors nicht ergeben.

Antwort

3

ggColors sollte eine Liste der Plotelemente zurückgeben. Dann alle Elemente der zurückgegebenen Liste können hinzugefügt werden, ein Grundstück mit +:

ggColors <- function(values = NULL, name = NULL, cold.colors = TRUE) { 
    # Some conditions: 
    if (is.null(values)){ 
     if (cold.colors) { 
     values <- c("darkblue","blue", "green") 
     } else { 
     values <- c("red","orange", "yellow") 
     } 
    }  
    # Modified default values of `ggplot2` functions: 
    return(list(scale_color_manual(name = name, values = values), 
       scale_fill_manual (name = name, values = values))) 
    } 

Dann

p + ggColors() 
Verwandte Themen