ggplot2:轴标签取自变量名而不是 labs()

ggplot2: Axis labels taken from variable names instead of labs()

我正在尝试创建一系列类似的函数来创建分位数范围内平均收入的条形图:四分位数、五分位数、十分位数和百分位数。在下面的示例中,quart_iles 函数收集参数并包含特定于 "quart" 部分的所有信息。 isles 函数使用 ggplot2 进行绘图,中间 bar_isles 函数通过 do.call 将参数从 quart_isles 传递给 isles,mainly-successful 努力绕过 non-standard 在函数内调用 ggplot 的评估问题。

唯一的例外是轴标签,它们被忽略以支持它们所代表的变量的名称。我对此感到困惑,特别是因为代码看起来与标题和副标题的代码完全相同,而且工作正常。

我认为我解决这个问题的部分困难在于我并不真正理解“+”符号的作用。它似乎更像 f(g()) 而不是 f(); g();,但我认为这两者都不是。但如果没有后者,我仍然很乐意接受前一个问题的答案

quart_args <- list(.tit = "U.S. Personal Income Distribution by Quartile xxx",
                   .sub = "Persons by adjusted household income (16)",
                   .nms = as.factor(c("1st", "2nd", "3rd", "4th")),
                   .yl  = "Mean Income",
                   .xl  = "Income Quartiles")

#############################################################################

quart_iles <- function(.data){
  names(.data)[1]<- "Quartiles"
  out <- bar_iles(.data, .args = quart_args)
  }

bar_iles <- function(.data, .args){
  force(.data)                              
  out <- do.call(iles, args = c(list(.dt = .data), .args))
}

iles<- function(.dt, .tit, .sub, .nms, .xl, .yl, ...){
  out <- ggplot(data = .dt) + 
    geom_col(mapping = aes(x=.nms, y=Quartiles)) +
    labs(title = .tit, subtitle = .sub, xlab = .xl, ylab = .yl) + 
    theme_light()
}

gg1 <- quart_iles(.data = tibble(10:13))
gg1

在调用 labs 时参数指定不正确。

iles<- function(.dt, .tit, .sub, .nms, .xl, .yl, ...){
out <- ggplot(data = .dt) + 
geom_col(mapping = aes(x=.nms, y=Quartiles)) +
labs(title = .tit, subtitle = .sub, x = .xl, y = .yl) + 
theme_light()

以这种方式更改函数 iles 应该可以解决问题