我想为用户创建一个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)))
我的想法已经用完了,希望有人能帮助我。
提前致谢!
答案 0 :(得分:1)
问题是您在shortname
上使用了b
,b
会返回aes_string
。只有这样,b
才会读取生成的b
并使用整个"shortname(b)"
进行评估。
您可以使用shortname("b")
代替g + geom_text(aes_string(label=paste('shortname(', use_column, ')')))
来避免这种情况。那是
aes
或者,您可以将get
与g + geom_text(aes(label=shortname(get(use_column))))
一起使用。
{{1}}