在ggplot中将表达式与函数结合起来

Combine expression with function in ggplot

我想制作一个 ggplot 函数,它允许我选择数据集、x 轴和 y 轴上的数据以及作为表达式的 y 轴标签,但我无法获取 y 轴表达式成为函数的一部分。

这是我目前的情况:

x_vs_time <- function (data, xaxis, yaxis, yaxislabel) {
  
ggplot(data, aes(x = {{xaxis}}, 
                y= {{yaxis}}))+
  geom_point(size =3, alpha =0.5)+ 
  ylab (expression(yaxislabel)) 
  }

x_vs_time (alldata, daycount, nutrient_concentration, NO[3]~(mu*M))

当我 运行 函数时,y 轴标签在函数中显示为变量名称,“yaxislabel”,我一直无法修复它。 我可以将其作为普通标签包含在内,但我有多个表达式想包含在多个图中,例如:

有谁知道如何在函数中包含 y 轴标签表达式?

使用 substitute 而不是 expression。当您使用 expression 时,它会捕获括号内的文字名称,而 substitute 将为您提供传递给函数的实际参数。

x_vs_time <- function (data, xaxis, yaxis, yaxislabel) {
  
ggplot(data, aes(x = {{xaxis}}, y = {{yaxis}})) +
  geom_point(size = 3, alpha = 0.5) + 
  ylab(substitute(yaxislabel))
}

显然,我们没有您的数据,但我们可以使用 built-in iris 数据集看到它的工作原理:

x_vs_time(iris, Sepal.Length, Sepal.Width, NO[3])

或使用 mtcars

的不同表达式
x_vs_time(mtcars, wt, mpg, Si:NO[3]~drawdown)