为每个唯一的主题ID生成单独的绘图,并将其与主题ID号一起保存在工作目录中

时间:2015-01-06 06:17:38

标签: r plot ggplot2 mapply

我有很多主题的大量数据。数据包含以下列:

    ID  TIME   CONC
7030104 2.0    0.536
7030104 2.5    1.320
7030104 3.0    1.460
7030104 4.0    5.070
7030104 5.0    17.300
7030104 6.0    38.600
70304   8.0    0.589
70304   10.0   35.400
70304   12.0   29.400
70304   24.0   10.900
70304   36.0   3.260
70304   48.0   1.290

我想为每个主题ID绘制一个单独的图(CONC与TIME),并自动将其保存到具有主题ID号的工作目录中。

我正在使用简单的绘图,但我需要帮助我如何将其应用于所有主题ID并自动将绘图保存到我的工作目录中。

setwd("..")
plotobj <- NULL
plotobj <- plot(sub$TIME,sub$CONC,type="b")

我正在使用RStudio

非常感谢您的协助!

2 个答案:

答案 0 :(得分:0)

首先尝试获取ID列表

id_arr = unique(sub$ID)

之后,保存每个可能ID的图表

for(i in id_arr) {
    sub_id = subset(sub, ID == i)
    jpeg(paste(i, ".jpg", sep=""))
    plot(sub_id$TIME, sub_id$CONC, type="b")
    dev.off()
}

答案 1 :(得分:0)

您可以将其保存在单个&#34; pdf&#34;文件,每个图表单页。 &#34;标题&#34;该图标识了子集&#34; ID&#34;。在这里,我在使用&#34; ID&#34;分割(lapply)数据集之后使用split。在plot中指定invisible参数广告包装,以便{R形成车台上的NULL循环不会打印出来。

par(mfrow=c(1,1))
pdf('Amer.pdf')
lst <- split(df, df$ID)
invisible(lapply(lst, function(sub) with(sub, 
    plot(TIME, CONC, type='b', main= paste('Plot of', ID[1])) )))
dev.off()

如果您需要&#34;单独的&#34;,.jpg图,lapply仍然可以使用

 invisible(lapply(lst, function(sub) {
      jpeg(paste0(sub$ID[1],'.jpg'))
       with(sub, plot(TIME, CONC, type='b', main=paste('Plot of', ID[1])))
      dev.off()
      }))

数据

df <- structure(list(ID = c(7030104L, 7030104L, 7030104L, 7030104L, 
7030104L, 7030104L, 70304L, 70304L, 70304L, 70304L, 70304L, 70304L
), TIME = c(2, 2.5, 3, 4, 5, 6, 8, 10, 12, 24, 36, 48), CONC = c(0.536, 
1.32, 1.46, 5.07, 17.3, 38.6, 0.589, 35.4, 29.4, 10.9, 3.26, 
1.29)), .Names = c("ID", "TIME", "CONC"), class = "data.frame",
row.names = c(NA, -12L))