代码之家  ›  专栏  ›  技术社区  ›  dnagirl

R:lattice.qq我怎么做治疗[x]和对照的多面板图?

  •  2
  • dnagirl  · 技术社区  · 15 年前

    我有这样一个数据帧:

    str(Data)
    'data.frame':   11520 obs. of  29 variables:
     $ groupname  : Factor w/ 8 levels "Control","Treatment1",..: 1 1 1 1 1 1 1 1 1 1 ...
     $ fCycle     : Factor w/ 2 levels "Dark","Light": 2 2 2 2 2 2 2 2 2 2 ...
     $ totdist    : num  0 67.5 89.8 109.1 58.3 ...
     #etc.
    

    我可以做一个单一的治疗1与对照的对比图,如下所示:

    qq(groupname~totdist|fCycle, data=Data, 
     subset=(groupname=='Control'|groupname=='Treatment1'))
    

    alt text

    我想自动绘制类似的图,治疗2和对照…治疗X和对照。这是循环的地方还是格子有更好的方法?

    1 回复  |  直到 9 年前
        1
  •  1
  •   nullglob    15 年前

    library(lattice)
    Data <- data.frame(groupname = factor(rep(c('Control',paste('Treatment',1:7,sep='')),each = 100)),
                       fCycle = factor(rep(rep(c('Dark','Light'),each = 50),8)),
                       totdist = sample(unlist(iris),800,replace = TRUE))
    

    接下来,添加一个变量来区分治疗组和对照组(即。 "Treatment2" 重新编码为 "Treatment" 等)

    Data$groupname2 <- factor(gsub('[1-9]','',as.character(Data$groupname)))
    

    然后重新排列数据集,以便给每个治疗组一份对照数据

    Data2 <- NULL
    for(treat in paste('Treatment',1:7,sep='')){
      Data2 <- rbind(Data2,
                     cbind(rbind(Data[Data$groupname == treat,],Data[Data$groupname == 'Control',]),
                           treat))
    }
    

    qq(groupname2~totdist|fCycle*treat, data=Data2)
    

    如果你希望每个治疗都有单独的图,那么一个循环会更好

    pdf('treatVsContQq.pdf')
    for(treat in paste('Treatment',1:7,sep='')){
      print(qq(groupname~totdist|fCycle, data=Data,
         subset=(groupname=='Control'|groupname==treat)))
    }
    dev.off()