迭代数据帧并为每列创建一个图

时间:2017-05-09 09:20:49

标签: r for-loop ggplot2

我想迭代一个数据框并根据特定列(例如价格)绘制每一列。

到目前为止,我所做的是:

for(i in ncol(dat.train)) {
ggplot(dat.train, aes(dat.train[[,i]],price)) + geom_point()

}

我想要的是通过绘制决策变量(即价格)来首次介绍我的数据(大约300列

我知道有一个类似的问题,但我不能真正理解为什么上面的内容并没有真正起作用。

1 个答案:

答案 0 :(得分:1)

你可以这样做,我用mtcars数据用mpg绘制其他连续变量。你必须将数据融合成长形式(使用聚集)然后使用ggplot来绘制这些连续变量(disp,drat,qsec等)来对抗mpg。在你的情况下,而不是mpg,你会得到价格和所有其他连续变量融化(如此处的disp,drat,qsec等),其余的分类变量可以用于形状和颜色等(可选)。

library(tidyverse)
    mtcars %>%
      gather(-mpg, -hp, -cyl, key = "var", value = "value") %>% 
      ggplot(aes(x = value, y = mpg, color = hp, shape = factor(cyl))) +
      geom_point() +
      facet_wrap(~ var, scales = "free") +
      theme_bw()

修改

如果我们需要为每个变量提供单独的图表,这是另一种解决方案。

创建一个如下变量列表:lyst <- list("disp","hp"),您可以使用colnames函数获取所有变量名称。使用lapply来遍历数据框中的所有“lyst”对象。

setwd("path") ###set the working directory here, This is the place where all the files are saved.

pdf(file=paste0("one.pdf"))
   lapply(lyst, function(i)ggplot(mtcars, aes_string(x=i, y="mpg")) + geom_point())
dev.off()

一个pdf文件。使用您设置的工作目录中的所有图形pdf生成

首先从解决方案输出:

enter image description here