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

问题描述 投票:2回答:2

我想使用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()
r dictionary ggplot2 purrr
2个回答
7
投票

这是一种可能性

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

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


0
投票

我为此做了一些更通用的功能,因为它是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)
  )
}

哪里:

  • 数据是您的数据框架
  • resp是响应变量
  • efflist是效果的焦点(自变量)

当然,您可以根据需要改变几何和/或美学。该函数返回一个可以传递到的图表列表,例如cowplotgridExtra例如:

library(gridExtra)
library(dplyr) # just for pipes

plotlist(mtcars, hp, c("mpg","cyl","disp")) %>%
 grid.arrange(grobs = ., left = "HP")

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.