ggplot使用purrr map()绘制具有多个y的相同x

时间:2017-06-21 16:17:47

标签: r dictionary ggplot2 purrr

我想使用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()

2 个答案:

答案 0 :(得分:7)

这是一种可能性

ys <- c("mpg","cyl","disp")
ys %>% map(function(y) 
    ggplot(mtcars, aes(hp)) + geom_point(aes_string(y=y)))

就像任何其他地图功能一样,你只需要在功能中正确配置你的美学。

答案 1 :(得分:0)

为此,我做了一些更通用的功能,因为它是EDA协议(Zuur et al., 2010)的一部分。这个article from Ariel Muldoon帮助了我。

update()

其中:

  • 数据是您的数据框
  • resp 是响应变量
  • 效果列表是效果的一个字符(独立变量)

当然,您可以根据需要更改几何和/或美学。该函数返回可以传递给例如cowplotgridExtra,例如:

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

enter image description here