ggplot2可以用于创建一组列相对于另一组列的绘图矩阵吗?

例如,对于下面的数据框,绘制以'x'开头的所有列与以'y'开头的所有列的关系,以生成图形网格。

require("tidyverse")

df <- tibble(
  x1 = sample(10),
  x2 = sample(10),
  x3 = sample(10),
  y1 = sample(10),
  y2 = sample(10)
)

而且,如果与上面的示例不同,这些列不是以常规模式命名的,那么可以选择任意组的列吗?

提前致谢

最佳答案

您可以先使用tidyr::gather再进行整形:

df_long <- df %>%
  gather(x_axis, x, contains("x")) %>%
  gather(y_axis, y, contains("y"))



除了contains之外,您还可以使用任何其他tidyverse选择功能,或者仅提供原始列名。

然后绘制:
ggplot(df_long, aes(x, y)) +
    geom_point() +
    facet_grid(y_axis ~ x_axis, switch = "both") +
    labs(x = NULL, y = NULL) +
    theme(strip.placement = "outside", strip.background = element_blank())

r - 使用ggplot2绘制一组列与另一组列-LMLPHP

如果您需要自由秤,则可以换行:
ggplot(df_long, aes(x, y)) +
    geom_point() +
    facet_wrap(~ interaction(y_axis, x_axis), scales = "free")

r - 使用ggplot2绘制一组列与另一组列-LMLPHP

08-19 22:03