【问题标题】:Fill ggplot by Dynamically Chosen Column(s)通过动态选择的列填充 ggplot
【发布时间】:2018-10-25 18:16:52
【问题描述】:

我正在创建一个 ggplot 条形图,如下所示

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_by = c("col 1", "col 2")

等等

【问题讨论】:

    标签: r ggplot2 dynamic parameter-passing


    【解决方案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")
    

    fill_by <- "qsec"
    [same as above]
    

    【讨论】:

    • +1 这很有帮助,谢谢!我遇到的唯一问题是我不确定如何满足问题的最后一部分(即填充多个动态指定的列)。我试过fill_by &lt;- lapply(fill_by,sym) 但这会引发错误。有什么想法吗?
    • 我不确定我是否理解这意味着什么。你想要两个图表出来,每个填充一个吗?还是您想以某种方式组合两个值?
    • 更多是后者。我习惯于像 Microstrategy 这样的数据可视化工具,其中用户可以将任意属性集合拖到可视化的“颜色依据”字段中,并且软件会自动根据数据中存在的这些属性的所有可能元组进行着色。我假设 ggplot 支持这种行为,但我猜我的假设是错误的?
    • 你能举个例子吗?例如,mtcars 数据会是什么样子?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    相关资源
    最近更新 更多