ggplot2:如果未提供美学效果,则默认填充

时间:2018-06-21 16:43:41

标签: r ggplot2 tidyeval

我有一个使用ggplot的函数。我想将其传递给变量以用于fill美观,或者在不传递任何内容时使用其他颜色。

if / else语句对下面的函数执行此操作,但是我的实际函数稍微复杂一些,并且具有一些if / else分支,所以我想将它们最小化。

是否可以将geom_bar()的默认填充设置为"blue",但是如果我传递fill的美感,可以将其替换吗?

或者,我正在考虑基于传递给函数的参数创建要传递给geom_bar()的参数列表,并使用!!!对其进行拼接。尽管我还没有真正了解tidyeval / quasiquotation,所以我不太了解那是怎么回事。

我也愿意接受其他解决方案。

library(ggplot2)

plotter <- function(x = mtcars, fill = NULL) {
    p <- ggplot(x, aes(factor(cyl)))

    # I don't like this if/else statement
    if (!is.null(fill)) { 
        p <- p + geom_bar(mapping = aes_string(group = fill, fill = fill))
    } else {
        p <- p + geom_bar(fill = "blue")
    }

    p
}

plotter()
plotter(fill = "as.factor(gear)")

0 个答案:

没有答案