在n个图中对n个数值变量绘制一个数字变量

时间:2014-07-09 08:25:16

标签: r plot

我有一个庞大的数据框,我想制作一些图来了解不同变量之间的关联。我不能用

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 +变量,所以它可能是一个拖累。

4 个答案:

答案 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)

enter image description here

答案 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")

你会得到类似的东西

enter image description here

答案 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 = "")
    }
}

注意:

  1. 您可以提供要绘制为yvars的变量列表, 否则它会在xvar的数据框中绘制所有(或前25个,以较小者为准)的变量。
  2. 如果地块数量超过25,边距将超出范围, 所以我只限制了25张图表。任何建议很好 处理这个是受欢迎的。
  3. 当图表的标题需要注意时,y轴标签也会被删除 它的。 x轴标签设置为xvar

答案 3 :(得分:0)

如果您的目标只是了解不同变量之间的关联,您还可以使用:

plot(y~., data = foo)

它不如使用ggplot那么好,并且它不会自动将所有图形放在一个窗口中(尽管您可以使用par(mfrow = c(a, b))更改它,但它是一种快速获取内容的方法你想要的。