如何在 ggplot 代码中以 fct_reorder 中的字符串形式提供变量名称?

How to supply variable names as strings in fct_reorder within ggplot code?

我想通过以字符串形式提供变量名称来创建 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 您是否指定了一个参数?”

如何修复此代码?

如果您想将变量作为字符串传递,您还可以使用 .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")