ggplot2 图的条件分面

问题描述 投票:0回答:1

我正在尝试使用

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
r ggplot2 facet-wrap
1个回答
0
投票

您可以通过提供带引号的列名称并使用

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")

enter image description here

我不确定如何将其作为未加引号的变量提供 - 可能是带有

rlang
quote/substitute

© www.soinside.com 2019 - 2024. All rights reserved.