R中ggplot2的非标准评估

时间:2018-04-27 17:48:38

标签: r ggplot2 dplyr rlang

我有一个相当简单的函数,它将数据框和该数据框中的列作为参数。该函数绘制y轴上数据框中的列与x轴上的“年”列。然后,它将显示相关列的值以及图上的点。

df_to_plot = data.frame(year = c(2011, 2012, 2013), data=c(0.22334, 0.345345, 0.456234))

makePlotFunc = function(df, y_var)
{
    ggplot(df, aes_(x=as.name("year"), y = as.name(y_var), group=1, label=as.name(y_var))) + geom_point() + geom_line() + geom_text()
}

makePlotFunc(df_to_plot, data)

你会注意到“数据”列有很多小数点。我希望能够舍入这些小数点,以便在绘图上显示这些数据点时看起来很好。通常,当不使用“非标准评估”时,可以在geom_text()中轻松完成,如下所示:

geom_text(aes(round(data, 2))

因为我使用非标准评估将其变成了一个函数,所以不能这样做。

geom_text(aes_(round(as.name(y_var), 2)))

这会引发错误。

non-numeric argument to mathematical function

我通过在数据框中创建一个新列作为标签来解决我的问题。

df_to_plot = mutate(df_to_plot, label = as.character(round(data, 2)))

尽管如此,如果有人知道如何使用非标准评估,我仍然感兴趣。

1 个答案:

答案 0 :(得分:1)

感谢MrFlick的回答。它奏效了!

geom_text(aes_(label=bquote(round(.(as.name(y_var)), 3))))