遍历多列,并为R中的每列绘制一个图?

时间:2019-06-07 01:30:59

标签: r

我有一个数据集,其中第一列是“年份”,接下来的五十列是每个美国州的数据。我想在一个pdf中生成多个图,将每个“状态”列与“年”列匹配(即[,1]和[,2],[,1]和[,3],... [,1]和[,50]。

我认为遍历第2-50列将是一个很好的解决方案,但是我无法使其在plot函数中正常工作。我是循环的新手,所以我不确定如何继续。以下是我的数据集中的示例以及我遇到的部分代码

testUS:
Year    ME   NH    VT   MA   RI   CT    NY
1953    4017 1579 5057 12215 1582 9252  23507
1954    5265 1351 1733 18561 633  8402  21002
1955    740  788  2214 9719  787  3958  22317
1956    985  184  1537 6458  957  5575  26639

pdf("testUSgraph.pdf")
for (i in 2:50) {
  plot(testUS[,1], testUS[,i])
}
dev.off

我收到的错误消息:

function (which = dev.cur()) 
{
    if (which == 1) 
        stop("cannot shut down device 1 (the null device)")
    .External(C_devoff, as.integer(which))
    dev.cur()
}
<bytecode: 0x1075edc30>
<environment: namespace:grDevices>

此外,每当我将testUS [,i]分配给变量时,该变量仅调用一种状态的数据(即仅显示第50列的数据)。

1 个答案:

答案 0 :(得分:0)

假设您的数据框为df

library(ggplot2)

col_names <- colnames(df)
col_names <- col_names[-1]

for (i in col_names){
    plot <- ggplot(df, aes_string(x=df$Year, y=i)) +
    geom_point()
    print(plot)
}

这应该将它们作为单独的图返回。

编辑:在同一视图中返回图并将其另存为pdf

col_names <- colnames(df)
col_names <- col_names[-1]

plot_list <- list()

for (i in col_names){
    plot <- ggplot(df, aes_string(x=df$Year, y=i)) +
    geom_point()
    plot_list[[i]] <- plot
}
plot_grob <- arrangeGrob(grobs=plot_list)
pdf("testUSgraph.pdf")
grid.arrange(plot_grob)
dev.off()

(在初始代码中保存pdf的问题可能是因为您忘记了括号,dev.off应该是dev.off()