我有一个数据集,其中第一列是“年份”,接下来的五十列是每个美国州的数据。我想在一个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列的数据)。
答案 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()
)