在 ggplot 中使用函数和变量列

Using a function and variable column within ggplot

我想为用户创建一个 ggplot 调用变量,而不更改脚本中的 ggplot 调用...

我有一个包含不同列的数据框,我想用它来标记绘图上的点。很多专栏都很长,我想提供一个函数 'shortname' 来稍微缩短该专栏...

我也想用一个变量来做这个变量,这就是我目前卡住的地方。

df <- data.frame(a=c('a;b;c','d;e;f'), b=c('A;B;C','D;E;F'),
                 x=c(1,2), y=c(2,3))

use_column <- 'b'
shortname <- function(x) {
  sub('([^;]+).*', '\1', x)
}

g <- ggplot(df, aes(x,y)) + geom_point()
g + geom_text(aes(label=a))
g + geom_text(aes(label=shortname(a)))
g + geom_text(aes(label=shortname(b)))

到目前为止,一切都按预期进行。第一个图显示缩短的 a 列,第二个图显示 b 列。但是当我尝试使用变量时 use_column,我不明白 运行...

g + geom_text(aes_string(label=shortname(use_column)))

我运行没主意了,希望有人能帮我解决这个问题。

提前致谢!

问题是您在 b 上使用了 shortname,returns b。只有这样 aes_string 才会读取结果 b 并使用整个 b 进行评估。

您可以使用 "shortname(b)" 而不是 shortname("b") 来避免这种情况。即

g + geom_text(aes_string(label=paste('shortname(', use_column, ')')))

或者,您可以将 aesget 一起使用。

g + geom_text(aes(label=shortname(get(use_column))))