我有一个庞大的数据框架,我想做一些图来了解不同变量之间的关联.我不能用
pairs(data)
Run Code Online (Sandbox Code Playgroud)
,因为那会给我400多块情节.然而,我有一个特别感兴趣的响应变量.因此,我想对所有变量绘制y,这会将绘图的数量从n ^ 2减少到n.你能告诉我怎么做吗?谢谢
编辑:我为了清楚起见添加了一个例子.假设我有数据帧
foo=data.frame(x1=1:10,x2=seq(0.1,1,0.1),x3=-7:2,x4=runif(10,0,1))
Run Code Online (Sandbox Code Playgroud)
我的响应变量是x3.然后我想生成连续排列的四个图,分别是x1对x3,x2对x3,x3的直方图,最后是x4对x3.我知道如何制作每个情节
plot(foo$x1,foo$x3)
plot(foo$x2,foo$x3)
hist(foo$x3)
plot(foo$x4,foo$x3)
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何连续排列它们.此外,如果有一种方法可以自动生成所有n个绘图,而不必每次都调用命令图(或hist),那将会很棒.当n = 4时,它不是一个大问题,但我通常处理n = 20 +变量,所以它可能是一个拖累.
可以做reshape2/ ggplot2/ gridExtra包组合.这样您就不需要指定图的数量.此代码适用于任何数量的解释变量,无需任何修改
foo <- data.frame(x1=1:10,x2=seq(0.1,1,0.1),x3=-7:2,x4=runif(10,0,1))
library(reshape2)
foo2 <- melt(foo, "x3")
library(ggplot2)
p1 <- ggplot(foo2, aes(value, x3)) + geom_point() + facet_grid(.~variable)
p2 <- ggplot(foo, aes(x = x3)) + geom_histogram()
library(gridExtra)
grid.arrange(p1, p2, ncol=2)
Run Code Online (Sandbox Code Playgroud)

tidyr软件包可帮助您高效地完成此任务。请参考这里了解更多选项
data %>%
gather(-y_value, key = "some_var_name", value = "some_value_name") %>%
ggplot(aes(x = some_value_name, y = y_value)) +
geom_point() +
facet_wrap(~ some_var_name, scales = "free")
Run Code Online (Sandbox Code Playgroud)
你会得到这样的东西