purrr 映射两个以上变量(用于使用 ggplot 制作配对图)

问题描述 投票:0回答:1

我很喜欢使用purrr的map和map2,但我经常发现自己想要映射更多的输入。我知道还有 pmap,但我不太明白如何使用它。

下面是我在 ggplot2 中创建配对图的示例。它缺少 name.x 的值作为 x 轴的标签。

plots = iris%>%
  pivot_longer(!Species)%>%
  left_join(
    iris%>%
      pivot_longer(!Species),by="Species"
  )%>%
  group_by(name.x,name.y)%>%
  nest()%>%
  mutate(
    plots =
      map2(
        .x=data,.y=name.x,
        ~ggplot(.x)+
          geom_point(aes(value.x,value.y,color=Species))+
          xlab(.y)
  ))

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

我期待您的建议! 如果能顺利地在管道中使用那就更理想了。

r ggplot2 purrr
1个回答
1
投票

像这样使用

pmap

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, name.x, name.y),   
    \(d, x, y) ggplot(d)+
      geom_point(aes(value.x, value.y, color = Species))+
      xlab(x) + ylab(y)
  ))

即:

  • 将要映射的变量收集到列表中,这样
    list(data, name.x, name.y)
  • 定义一个接受这些参数的函数。

定义该函数有多种方法。例如。您可以像使用

map2
那样使用公式语法,即
..1
..2
..3
。但我更喜欢匿名函数的新语法(即
\(x, y)
),因为你可以命名参数。

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