1

我查看了互联网和这个网站,但我没有找到解决方案,如果我的问题已经得到解答,我很抱歉。我有一个数据框,其中几行具有相同的 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 与 value2 分别为 P1、P22 和 P30 绘制。

我尝试用循环编写脚本(但我是 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
4

3 回答 3

4

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

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

另请注意,这不涉及您“Errore”(我猜西班牙语为 Error )

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

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

 par(mar=rep(2,4))
于 2013-06-26T13:39:49.827 回答
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)

在此处输入图像描述

于 2013-06-26T13:37:41.647 回答
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()
于 2013-06-26T13:38:25.067 回答