【问题标题】:How to supply variable names as strings in fct_reorder within ggplot code?如何在 ggplot 代码中的 fct_reorder 中将变量名称作为字符串提供?
【发布时间】:2021-01-06 14:07:54
【问题描述】:

我想通过以字符串形式提供变量名称来创建 geom_col 图表。我知道 aes_string 在 ggplot 代码中做到了这一点。但是,我不确定如何处理 fct_reorder 中提供的变量以对条形进行排序。这是我的 wip 代码。

我想转换这个:

mpg %>% 
  ggplot() + 
  geom_col(aes(x = cty, y = fct_reorder(drv, cty, .fun = mean, na.rm = T), fill = drv), width = 0.8) +
  theme_classic()

变成一个函数,

chart_fun <- function(x, y) {
  mpg %>%
    ggplot() +
    geom_col(aes_string(x = x, y = fct_reorder(y, x, .fun = mean, na.rm = T), fill = y), width = 0.8) +
    theme_classic()
}

chart_fun(x = "cty", y = "drv")

但我收到一条错误消息,“错误:... 的 1 个组件未被使用。我们检测到这些有问题的参数:* na.rm 您是否指定了参数错误?”

如何修复此代码?

【问题讨论】:

    标签: r ggplot2 rlang forcats


    【解决方案1】:

    如果您想将变量作为字符串传递,您还可以使用.data 代词,它可以让您坚持使用aes()

    library(ggplot2)
    library(dplyr)
    library(forcats)
    
    chart_fun <- function(x, y) {
      mpg %>%
        ggplot() +
        geom_col(aes(x = .data[[x]], y = fct_reorder(.data[[y]], .data[[x]], .fun = mean, na.rm = T), fill = .data[[y]]), width = 0.8) +
        theme_classic()
    }
    
    chart_fun(x = "cty", y = "drv")
    

    【讨论】:

    • 完美,有效!!只需在建议的解决方案中将 fill = .data[[x]] 更改为 fill = .data[[y]]。
    • 噢。是的。对不起。如果您进行复制和粘贴,就会发生这些事情......(:
    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多