在ggplot中使用函数和变量列

时间:2015-02-17 07:43:15

标签: r ggplot2

我想为用户创建一个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)))

到目前为止,一切都按预期工作。第一个图显示缩短的列,第二个图显示列b。但是当我尝试使用变量时 use_column,我没有让它运行...

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

我的想法已经用完了,希望有人能帮助我。

提前致谢!

1 个答案:

答案 0 :(得分:1)

问题是您在shortname上使用了bb会返回aes_string。只有这样,b才会读取生成的b并使用整个"shortname(b)"进行评估。

您可以使用shortname("b")代替g + geom_text(aes_string(label=paste('shortname(', use_column, ')'))) 来避免这种情况。那是

aes

或者,您可以将getg + geom_text(aes(label=shortname(get(use_column)))) 一起使用。

{{1}}