包装几个ggplot2函数并使用包含运算符" +"在R

时间:2016-05-23 15:41:55

标签: r ggplot2

我从问题开始:有没有办法创建一个函数,比如ggColors,它包装了包ggplot2中的其他几个函数?该函数应使用运算符ggplot(而不是+运算符)与%>%对象相加,如下例所示:

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

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_manualscale_fill_manual没有加起来,因为它们不会在函数ggplot中产生ggColors个对象。

1 个答案:

答案 0 :(得分:3)

display:block应该返回一个情节元素列表。然后,可以使用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)))
  }