我正在尝试使用
ggplot2
创建一个单变量分布图,它可以选择允许我们提供分面变量。
我的目标是有条件地为密度图创建面。下面,我创建了一个与单个不带引号的变量一起使用的函数。当我添加未加引号的分面变量时,无法找到该变量。
下面的最后一行代码应提供
gear
级别 3、4 和 5 的密度图。
library(ggplot2)
# univariate density function w/ conditional facetting
univar_plot <- function(df, var, facet_var = NULL) {
# create density plot
p <- df |> ggplot(aes(x = {{var}})) + geom_density()
# Conditional faceting
if(!is.null(facet_var)) p <- p + facet_wrap(vars( {{facet_var}} ))
# plot
p
}
univar_plot(mtcars, mpg) # works
univar_plot(mtcars, mpg, facet_var = gear) # Error: object 'gear' not found
您可以通过提供带引号的列名称并使用
get
将其作为变量提供给 ggplot 来获取构面:
univar_plot <- function(df, var, facet_var = NULL) {
# create density plot
p <- df |> ggplot(aes(x = {{var}})) + geom_density()
# Conditional faceting
if(!is.null(facet_var)) p <- p + facet_wrap(vars(get(facet_var)))
# plot
p
}
univar_plot(mtcars, mpg, facet_var = "gear")
我不确定如何将其作为未加引号的变量提供 - 可能是带有
rlang
或 quote/substitute