You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用purrr的pmap处理多变量映射,完善ggplot2配对图?

purrr::pmap 用法说明

pmap 是处理多输入映射的工具,它接受一个包含多个输入的列表,每个列表元素的长度要一致,然后把对应位置的元素传给映射函数:

  • 用公式写法时,可通过 ..1、..2、..3 依次指代列表里的第1、2、3个输入
  • 也可以给映射函数的参数命名,让代码可读性更强
配对图代码修复(含pmap应用)

你的代码中用map2仅传递了data和name.x,其实可以结合name.y一起传入,同时设置x轴和y轴标签。用pmap能一次性处理多个输入,完美适配管道流:

library(tidyverse)
library(ggpubr)

plots <- iris %>%
  pivot_longer(!Species) %>%
  left_join(iris %>% pivot_longer(!Species), by = "Species") %>%
  group_by(name.x, name.y) %>%
  nest() %>%
  mutate(
    plots = pmap(
      # 传入包含三个输入的命名列表
      list(data = data, x_label = name.x, y_label = name.y),
      # 用命名参数引用输入,逻辑更清晰
      ~ ggplot(.data) +
        geom_point(aes(value.x, value.y, color = Species)) +
        xlab(.x_label) +
        ylab(.y_label)
    )
  )

ggarrange(plotlist = plots$plots, common.legend = TRUE, legend = "bottom")

代码说明

  1. pmap的第一个参数是列表,给元素命名后,映射函数里可直接用.data、.x_label、.y_label引用对应输入,比..1、..2的写法更直观
  2. 修改后每个图的x轴会显示name.x(如Sepal.Length),y轴显示name.y,完全满足你的需求
  3. 整个流程全程在管道内完成,保持代码流畅性

如果习惯简洁写法,也可以用位置参数替代命名:

mutate(
  plots = pmap(
    list(data, name.x, name.y),
    ~ ggplot(..1) +
      geom_point(aes(value.x, value.y, color = Species)) +
      xlab(..2) +
      ylab(..3)
  )
)

内容的提问来源于stack exchange,提问作者sisyphos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:12:28