用于多图的循环

时间:2013-06-26 13:30:57

标签: r for-loop plot

我查看了互联网以及本网站,但我没有找到解决方案,很抱歉,如果我的问题已经得到解答。 我有一个数据帧,其中几行具有相同的ID。比方说吧

ID   Value1  Value2
P1    12      3
P1    15      4
P22   9       12
P22   15      14
P22   13      9
P30   10      12

是否可以为每个不同的ID编写一个脚本,该脚本将数据帧和绘图放在不同的页面Value1~Value2中?换句话说,我有3个图,其中value1绘制为P1,P22和P30的值2.

我尝试用循环编写一个脚本(但我真的是R的新手):

for (i in levels(dataset$ID)) {
 plot(dataset[i,2], dataset[i,2])
}

但我收到错误:

Errore in plot.new() : figure margins too large
Warning messages:
1: In min(x) : no non-missing arguments to min; returning Inf
2: In max(x) : no non-missing arguments to max; returning -Inf

3 个答案:

答案 0 :(得分:4)

我会在这里使用by,按ID对您的数据进行分组。注意另外我使用ID作为标题。如果你没有很多ID,也许是一个方面的方法,起诉更高级别的情节包,如@Roman所示,这里更好。

by (dataset,dataset$ID,function(i){
  plot(i$Value1,i$Value1,main=unique(i$ID))
})

另请注意,这不会对您“Errore”(我猜错误的西班牙语)

Errore in plot.new() : figure margins too large

一般情况下,当我收到此错误时,使用RStudio,我会扩大我的绘图区域。否则,您可以在调用绘图循环之前使用类似的东西设置绘图边距:

 par(mar=rep(2,4))

答案 1 :(得分:2)

我会这样做。

mydf <- data.frame(id = sample(1:4, 50, replace = TRUE), var1 = runif(50), var2 = rnorm(50))

library(ggplot2)
ggplot(mydf, aes(x = var1, y = var2)) +
  theme_bw() +
  geom_point() + 
  facet_wrap(~ id)

enter image description here

答案 2 :(得分:2)

我不清楚你在“不同的页面”中的意思。 PDF的页面?然后在评论中运行代码。

DF <- read.table(text="ID   Value1  Value2
P1    12      3
P1    15      4
P22   9       12
P22   15      14
P22   13      9
P30   10      12",header=TRUE)


#pdf("myplots.pdf")
for (i in levels(DF$ID)) {
  plot(Value1 ~ Value2,data=DF[DF$ID==i,])
}
#dev.off()