我有一个庞大的数据框,我想制作一些图来了解不同变量之间的关联。我不能用
pairs(data)
,因为这会给我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))
我的响应变量是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)
但是我不知道如何连续排列它们。此外,如果有一种方法可以自动生成所有n个绘图,而不必每次都调用命令图(或hist),那将会很棒。当n = 4时,它不是那么大的问题,但我通常会处理n = 20 +变量,所以它可能是一个拖累。
答案 0 :(得分:7)
可以执行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)
答案 1 :(得分:4)
包 tidyr 有助于高效地完成此任务。有关更多选项,请参阅here
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")
你会得到类似的东西
答案 2 :(得分:1)
我遇到了同样的问题,我没有ggplot2
的任何经验,所以我使用plot
创建了一个函数,它接受数据框,并将变量绘制为参数和生成图表。
dfplot <- function(data.frame, xvar, yvars=NULL)
{
df <- data.frame
if (is.null(yvars)) {
yvars = names(data.frame[which(names(data.frame)!=xvar)])
}
if (length(yvars) > 25) {
print("Warning: number of variables to be plotted exceeds 25, only first 25 will be plotted")
yvars = yvars[1:25]
}
#choose a format to display charts
ncharts <- length(yvars)
nrows = ceiling(sqrt(ncharts))
ncols = ceiling(ncharts/nrows)
par(mfrow = c(nrows,ncols))
for(i in 1:ncharts){
plot(df[,xvar],df[,yvars[i]],main=yvars[i], xlab = xvar, ylab = "")
}
}
注意:
yvars
的变量列表,
否则它会在xvar
的数据框中绘制所有(或前25个,以较小者为准)的变量。xvar
。答案 3 :(得分:0)
如果您的目标只是了解不同变量之间的关联,您还可以使用:
plot(y~., data = foo)
它不如使用ggplot
那么好,并且它不会自动将所有图形放在一个窗口中(尽管您可以使用par(mfrow = c(a, b))
更改它,但它是一种快速获取内容的方法你想要的。