R: lattice.qq Wie kann ich tun, um einen Multi-Panel-Plot der Behandlung [x] vs Kontrolle?

StackOverflow https://stackoverflow.com/questions/3120468

  •  30-09-2019
  •  | 
  •  

Frage

Ich habe ein Datenrahmen, dass sieht wie folgt aus:

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.

Ich kann so ein einzelnes Grundstück von Behandlung1 vs Kontrolle tun:

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

Es sieht wie folgt aus:

alt text

Ich mag automatisch ähnlichen Grund Anwendung2 vs Kontrolle ... TreatmentX vs Kontrolle machen. Ist dies der richtige Ort für eine Schleife oder ein Gitter, einen besseren Weg hat?

War es hilfreich?

Lösung

Um dies zu tun, auf einer einzigen Platte nimmt einige Neuanordnung. Zuerst werde ich einen Beispieldatensatz mit der gleichen Art von Struktur hat wie Sie

erzeugen
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))

Als Nächstes fügt eine Variable zwischen Behandlungs- und Kontroll zu unterscheiden (d.h. "Treatment2" als "Treatment" umcodiert, etc.)

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

neu ordnen Sie dann die Daten-Set, so dass jede Behandlungsgruppe eine Kopie der Steuerdaten gegeben ist

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

Schließlich können wir die gewünschten Graphen machen

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

Wenn Sie für jede Behandlung getrennte Diagramme wollen, dann wäre eine Schleife besser sein

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()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top