2016-05-23 5 views
2

で演算子「+」でラッパーを使用:関数を作成する方法があり、パッケージggplot2から他のいくつかの機能をラップggColorsを、言いますか?この関数は、この例のように、オペレータ+(なく%>%演算子)を使用してggplotオブジェクトにまで追加する必要がありますggColorsはこのようなものでなければなりませんラップいくつかのggplot2機能と私​​は<strong>質問</strong>で始まるR

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

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

を問題はそのscale_color_manualで、 scale_fill_manualは、ggColorsの中にggplotオブジェクトが存在しないため、加算されません。

答えて

3

ggColorsは、プロット要素のリストを返す必要があります。その後、返されたリストのすべての要素は、+を使用して、プロットに追加することができます。

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

その後、

p + ggColors() 
関連する問題