如何在单个if语句中添加多个ggplot2图层(无需重复if判断)
在单个if语句中添加多个ggplot2图层的方法
你遇到的问题是因为if语句中未将多个ggplot元素打包为一个可被+运算符识别的整体。以下两种方法可以解决这个问题:
方法1:用list()包裹多个元素
将需要添加的图层、标尺设置等元素放入list()中,ggplot会自动遍历列表并逐个添加:
dat <- data.frame(x = 1:5, y = 1:5, p = 1:5, q = factor(1:5), r = factor(1:5)) ggplot(dat, aes(x, y, colour = p, size = q, shape = r)) + geom_point() + { if(TRUE) list(guides(col=FALSE), xlim(0, 10), ylim(0, 10)) } + theme_classic()
方法2:用括号将多个元素组合为单一对象
通过括号让多个元素先通过+组合成一个ggplot修改对象,再作为if的返回值:
dat <- data.frame(x = 1:5, y = 1:5, p = 1:5, q = factor(1:5), r = factor(1:5)) ggplot(dat, aes(x, y, colour = p, size = q, shape = r)) + geom_point() + { if(TRUE) (guides(col=FALSE) + xlim(0, 10) + ylim(0, 10)) } + theme_classic()
补充说明
当if条件为FALSE时,语句会返回NULL,ggplot的+运算符会自动忽略NULL,因此这种写法也能自然兼容条件不满足的场景,无需额外处理。
内容的提问来源于stack exchange,提问作者Oscar Kjell
相关产品推荐
相关产品推荐

