使用aes将列名传递给ggplot函数

时间:2017-07-21 15:39:18

标签: r dataframe ggplot2

您有一个要将列名传递给的绘图函数,如下所示:

plottr <- function(df, flag, flagaes) {
    ddply(df, flag, summarize, pct = sum(hitbox==1)/length(hitbox)) %>%
    ggplot(aes_string(x=flagaes, y='pct')) + geom_bar(stat = "identity")
}

许多人(包括我)面临的问题是ddply函数按原样获取列名并在数据帧中找到它。然而,Aes并不知道如何处理字符串。我们如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

首先,对于flag变量,使用as.name函数传递列名以将其从字符串形式中删除。这样做的原因是如果你没有作为字符串传递,R将尝试找到一个带有你输入名称的变量。

接下来,需要将aes调用为aes_string以将列名称传递给它,然后尝试对pct进行字符串化。如上所示,这可以通过在ggplot函数中重新填充列名来解决,在上面的函数中看作\`pct`\

我认为将此分享给未来用户会很好,我确信这不是实现这一目标的最简洁方法。