我正在制作几个图,为了灵活起见,我计划用函数来 Package ,作为其中的一部分,我想根据某些条件为这些图指定小面。
具体来说,我有一个grouping_vars
的列表(在其他地方指定),我用它来执行其他一些数据操作。如果只有一个grouping_var
,我希望我的绘图函数能够自动使用facet_wrap
,或者如果在grouping_var
中指定了两个或更多变量,则对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
。
有没有一种方法可以像这样有条件地指定镶嵌面?
2条答案
按热度按时间mbskvtky1#
按照小插图here中的建议,我们应该能够将
vars()
与.data
代词一起使用,如下所示:由reprex package(v2.0.0)于2023年3月14日创建
lokaqttq2#
我们可以创建一个自定义函数,该函数使用
get
将变量传递给ggplot
。由reprex package(v2.0.1)于2023年3月14日创建