通过动态选择的列填充ggplot

时间:2018-10-25 18:16:52

标签: r ggplot2 dynamic parameter-passing

我正在创建如下的ggplot barplot

fill_by <- "some_column"
g <- ggplot(plot_data,aes(x = xvals,y = yvals, fill = fill_by)) +
     geom_bar(stat = "identity")

在这里,fill_by是一个变量,其中包含我要用其填充竖线的列的名称。在函数中使用fill = fill_by不能产生期望的结果,因为没有名为“ fill_by”的列。将eval包装在fill_by周围没有帮助,并使用

fill_by <- enquo(fill_by)
g <- ggplot(plot_data,aes(x = xvals,y = yvals, fill = !!fill_by)) +
     geom_bar(stat = "identity")

提到的here也不起作用。

是否可以通过这种方式动态指定fill参数的值?理想的解决方案可以容纳指定为la

的多个列
fill_by = c("col 1", "col 2")

1 个答案:

答案 0 :(得分:1)

在这种情况下,应使用sym从字符切换到名称。

https://edwinth.github.io/blog/dplyr-recipes/

library(dplyr)

fill_by <- "cyl"

fill_by <- sym(fill_by)
ggplot(mtcars %>% tibble::rownames_to_column() %>% head(3),
            aes(x = rowname,y = mpg, fill = !!fill_by)) +
  geom_bar(stat = "identity")

enter image description here

fill_by <- "qsec"
[same as above]

enter image description here