我正在制作几个图表,为了灵活性,我计划将它们包装在函数中,并且作为其中的一部分,我想根据某些条件指定这些图表的分面。
具体来说,我有一个grouping_vars
列表(在其他地方预先指定),我使用它对数据执行几项操作。如果只有一个grouping_var
,我希望我的绘图函数能够自动使用facet_wrap
,或者如果指定了两个或更多变量,则使用前两个进行facet_grid
。
因此,例如,如果基本图是这样的:
mtcars %>% ggplot() + geom_point(aes(x = hp, y = mpg))
如果我指定
grouping_vars <- c("cyl")
,我希望实际上得到的是:mtcars %>% ggplot() +
geom_point(aes(x = hp, y = mpg)) +
facet_wrap(~cyl)
如果我指定grouping_vars <- c("cyl", "carb")
,我希望得到:
mtcars %>% ggplot() +
geom_point(aes(x = hp, y = mpg)) +
facet_grid(vars(cyl), vars(carb))
mtcars %>% ggplot() +
geom_point(aes(x = hp, y = mpg)) +
{if(length(grouping_vars==1)) facet_wrap(grouping_vars[[1]])} +
{if(length(grouping_vars>=2)) facet_grid(vars(grouping_vars[[1]]), vars(grouping_vars[[2]]))}
但它似乎不起作用。如果在grouping_vars
中只有一个元素,会出现Error in grouping_vars[[2]] : subscript out of bounds
等错误提示。
有没有一种有条件指定分面的方法呢?