如何在不使用 R 中的 GGally 的情况下绘制矩阵列数据的所有组合?

How to plot all combinations of matrix column data without using GGally in R?

我有一个包含 4 个物种的物种矩阵。我想在不使用 ggpairs 的情况下在 ggplot2 中绘制它们的丰度。我不确定如何最好地将它转换成一个数据集,可以用 facet_wrap 为每个物种对绘制数据集,除了它本身(总共 6 个图)和线性回归拟合。我也不知道我将如何标记每一行的轴,因为它们都是不同的(Plot 1:: x = sp.1, y = sp.2; Plot2 x = sp.2, y = sp.3)

#Data-Set
sp1 <- rnorm(72, mean = 4, 1)
sp2 <- rnorm(72, mean = 2, 1)
sp3 <- rnorm(72, mean = 3, 1)
sp4 <- rnorm(72, mean = 9, 1)

sp.abd <- data.frame(sp1, sp2, sp3, sp4)

这是一种使用 tidyr::pivot_longer 和 dplyr::left_join 重塑数据并配对变量的方法。

library(tidyverse)
sp.abd %>%
  pivot_longer(everything()) %>%
  mutate(dummy = 1) -> sp.abd.long

sp.abd.long %>%
  left_join(sp.abd.long, by = "dummy") %>%
  filter(name.x != name.y) %>%
  ggplot(aes(value.x, value.y)) +
  geom_point(size = 0.1) +
  geom_smooth(method = "lm", se = FALSE) +
  facet_grid(name.x ~ name.y)

或者,只获得六个主要比较,没有空白方面:

sp.abd.long %>%
  left_join(sp.abd.long, by = "dummy") %>%
  filter(name.x < name.y) %>%
  mutate(label = paste(name.x, "vs.", name.y)) %>%
  ggplot(aes(value.x, value.y)) +
  geom_point(size = 0.1) +
  geom_smooth(method = "lm", se = FALSE) +
  facet_wrap(~label)