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