【问题标题】:Using a function and variable column within ggplot在 ggplot 中使用函数和变量列
【发布时间】:2015-04-17 21:09:35
【问题描述】:

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

我的想法已经不多了,希望有人可以帮助我。

提前致谢!

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    问题是你在b 上使用shortname,它返回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))))
    

    【讨论】:

    • 嗯,这仍然很难阅读...有没有办法使用 aes() 使其更具可读性...我只是在一些测试中使用了 aes_string()...但至少这是一个可行的解决方案,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 2021-05-13
    • 2018-01-31
    • 1970-01-01
    相关资源
    最近更新 更多