通过变量作为aes参考

时间:2019-04-03 16:04:21

标签: r ggplot2

我正在构建一个循环以打印一系列绘图以分隔R中的文件。一切正常,除了当我尝试将变量传递给ggplot中的aes时,geom_histogram认为该值现在是离散的。

这可行:

epdSimpleName <- c("API", "TI", "CE")

for (epdName in epdSimpleName) {
  plot <- ggplot(simpledf, aes(x=API))
  plot <- plot + geom_histogram(binwidth=5)

  print(plot)
}

但这不是:

epdSimpleName <- c("API", "TI", "CE")

for (epdName in epdSimpleName) {
  plot <- ggplot(simpledf, aes(x=epdName))
  plot <- plot + geom_histogram(binwidth=5)

  print(plot)
}

因为我认为R认为API,TI等是离散的?

Error: StatBin requires a continuous x variable: the x variable is discrete. Perhaps you want stat="count"?

感谢您的帮助/指导!

1 个答案:

答案 0 :(得分:1)

在这种情况下,错误消息令人困惑,并且不能很好地提示出什么地方出了问题。

有效的示例将美学定义为aes(x = API)API不能被引用很重要。无效的示例将美感指定为aes(x = "API")(未明确指定,但循环遍历时会发生这种情况。)

因此,有必要获取"API"并将其“取消引用”。您可以使用!!rlang::sym("API")

library("tidyverse")

data(diamonds)

plot <- ggplot(diamonds, aes(x = x))
plot <- plot + geom_histogram()
print(plot)
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

vars <- c("x")

for (var in vars) {
  plot <- ggplot(diamonds, aes(x = !!rlang::sym(var)))
  plot <- plot + geom_histogram()
  print(plot)
}
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

reprex package(v0.2.1)于2019-04-03创建

相关问题