首页 > 解决方案 > ggplot2:如果未提供美学,则默认填充

问题描述

我有一个使用 ggplot 的函数。我想将它传递给一个变量以用于fill美学,或者当我不传递任何东西时使用不同的颜色。

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

是否可以为 to 设置默认填充geom_bar()"blue"但如果我传入fill美学,是否会被覆盖?

或者,我正在考虑根据传递给我的函数的参数创建一个要传递给的参数列表geom_bar(),并将其拼接到 using 中!!!。不过,我还没有真正了解 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)")

标签: rggplot2tidyeval

解决方案


推荐阅读