用于绘制多个图形的循环

时间:2015-09-25 14:40:30

标签: r loops for-loop

我有一个包含1104行和2列的数据框

a<-rep(1998:2013,times=69)
b<-rnorm(1104)
data<-data.frame(a,b)

我要做的是以下列方式绘制前48行:

plot(data$b[1:16] ~ data$a[1:16],col="red")
points(data$b[17:32] ~ data$a[17:32],col="green")
points(data$b[33:48] ~ data$a[33:48],col="blue")

这将给我一个包含三组数据的图表。然后我想为下一组48行重复这个,如下所示:

plot(data$b[49:64] ~ data$a[1:16])
points(data$b[65:80] ~ data$a[65:80])
points(data$b[81:96] ~ data$a[81:96])

我想继续重复直到第1104行

plot(data$b[1057:1072] ~ data$a[1057:1072])
points(data$b[1073:1088] ~ data$a[1073:1088])
points(data$b[1089:1104] ~ data$a[1089:1104])

有什么方法可以把它放在循环中吗?这意味着我将有23个情节。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我会在初始数据集中添加一些列。

set.seed(1)
a<-rep(1998:2013,times=69)
b<-rnorm(1104)
set<-rep(1:23,each=48)
col<-rep(c("red","green", "blue"),each=16, times=23)
data<-data.frame(a,b, set, col)

我喜欢使用ggplot,但如果你想要

,你可以使用base
library(ggplot2)

pdf("multplot.pdf")

for (x in 1:23){
  #subset data based on set
  df.s<-subset(data, set==x)
  g<-ggplot(df.s, aes(x=a,y=b, color=col))+geom_point()
  print(g)

}
dev.off()

在基地R

pdf("multplot2.pdf")

for (x in 1:23){

  df.s<-subset(data, set==x)
  #the `col` column is not used
  plot(df.s$b[1:16] ~ df.s$a[1:16],col="red")
  points(df.s$b[17:32] ~ df.s$a[17:32],col="green")
  points(df.s$b[33:48] ~ df.s$a[33:48],col="blue")

}
dev.off()