映射一些数字列并为每个带有分组变量的箱线图

Dou*_*Fir 0 r ggplot2 purrr

我想 purrr::map 一个 df 并为每一列生成一个带有分组变量的箱线图。尝试示例:

mtcars |> select(am, gear, carb) |> 
  map(~ ggplot() +
        geom_boxplot(aes(y = .x, fill = factor(mtcars$cyl))) +
        labs(title = .y))
Run Code Online (Sandbox Code Playgroud)

结果:

dots_list(..., title = title, subtitle = subtitle, Caption = Caption, 中的错误:...列表包含的元素少于 2 个

期望的结果:

  1. .x将是来自 df 的向量/场
  2. 使用本机管道占位符_,分配分组变量cyl
  3. 标题将是正在绘制的列的名称。我确信我记得.y以前曾在这里使用过

我如何 purrr::map 3 列 am、gear 和 carb,为每列生成一个按 cyl 分组/分割并使用 hte 本地管道的箱线图?

r2e*_*ans 5

对于purrr::map,它不会定义.y,但我推断您打算将其作为列名称。使用purrr::imap并且您的代码可以工作。

library(dplyr)
library(purrr)
library(ggplot2)
mtcars |> select(am, gear, carb) |> 
  imap(~ ggplot() +
        geom_boxplot(aes(y = .x, fill = factor(mtcars$cyl))) +
        labs(title = .y))
Run Code Online (Sandbox Code Playgroud)

三个 ggplot 图像

可选,我用以下方法制作了上述三重图patchwork

library(patchwork)
map(c("am", "gear", "carb"), ~ mtcars |> 
      ggplot() +
        geom_boxplot(aes(y = .data[[.x]], fill = as.factor(cyl))) +
      labs(title = .x)) |>
  Reduce(`+`, x = _)
Run Code Online (Sandbox Code Playgroud)

...虽然这也可以通过刻面更容易地完成。