我想使用purrr包方法创建多个具有相同x但不同y的图。也就是说,我想使用map()或walk()函数来执行此操作。
使用mtcars数据集以简化。
ggplot(data = mtcars, aes(x = hp, y = mpg)) + geom_point()
ggplot(data = mtcars, aes(x = hp, y = cyl)) + geom_point()
ggplot(data = mtcars, aes(x = hp, y = disp)) + geom_point()
编辑到目前为止我已经尝试过
y <- list("mpg", "cyl", "disp")
mtcars %>% map(y, ggplot(., aes(hp, y)) + geom_point()
这是一种可能性
ys <- c("mpg","cyl","disp")
ys %>% map(function(y)
ggplot(mtcars, aes(hp)) + geom_point(aes_string(y=y)))
它就像任何其他地图功能一样,您只需要在功能中正确配置您的美学。
我为此做了一些更通用的功能,因为它是EDA协议(Zuur et al., 2010)的一部分。这个article from Ariel Muldoon帮助了我。
plotlist <- function(data, resp, efflist) {
require(ggplot2)
require(purrr)
y <- enquo(resp)
map(efflist, function(x)
ggplot(data, aes(!!sym(x), !!y)) +
geom_point(alpha = 0.25, color = "darkgreen") +
ylab(NULL)
)
}
哪里:
当然,您可以根据需要改变几何和/或美学。该函数返回一个可以传递到的图表列表,例如cowplot或gridExtra例如:
library(gridExtra)
library(dplyr) # just for pipes
plotlist(mtcars, hp, c("mpg","cyl","disp")) %>%
grid.arrange(grobs = ., left = "HP")