2016-10-08 3 views
0

Ich verwende ezPlot aus dem ez-Paket in R, um Ergebnisse eines gemischten innerhalb und zwischen-SS-Designs zu plotten. Der Datenpunkt aus den beiden Gruppen habe ich überlagert, so dass ich sowohl den Datenpunkt als auch den zugehörigen Fehlerbalken jittern möchte.ezPlot überlappende Fehlerbalken und Daten

data<-structure(list(Sub = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("WW", "XX", "YY", 
"ZZ"), class = "factor"), DepVar = c(0.67, 0.35, 0.09, 0.2, 0.19, 
0.13, 0.45, 0.23, 0.08, 0.32, 0.17, 0.18, 0.67, 0.36, 0.55, 0.4, 
0.37, 0.05, 0.26, 0.11, 0.08, 0.46, 0.29, 0.18, 0.16, 0, 0.38, 
0.22, 0.08, 0.1, 0.54, 0.17, 0.07, 0.38, 0.75, 0.87, 0.27, 0.57, 
0.31, 0.28, 0.07, 0.12, 0.75, 0.33, 0.23, 0.33, 0.26, 0.18), 
Group = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("A", "B"), class = "factor"), 
Con = structure(c(1L, 3L, 3L, 3L, 4L, 5L, 2L, 3L, 4L, 1L, 
2L, 3L, 1L, 3L, 3L, 3L, 4L, 5L, 2L, 3L, 4L, 1L, 2L, 3L, 1L, 
3L, 3L, 3L, 4L, 5L, 2L, 3L, 4L, 1L, 2L, 3L, 1L, 3L, 3L, 3L, 
4L, 5L, 2L, 3L, 4L, 1L, 2L, 3L), .Label = c("C", "D", "E", 
"F", "G"), class = "factor")), .Names = c("Sub", "DepVar", 
"Group", "Con"), class = "data.frame", row.names = c(NA, -48L)) 

ezPlot(data, 
    dv = .(DepVar), 
    wid = .(Sub), # subject 
    within = .(Con), 
    between=.(Group), 
    split=.(Group), 
    do_bars=TRUE, 
    type = 2, 
    x = .(Con)) 

enter image description here

Ein nicht elegant Trick ist so eingestellt, schuppenFarb manuelle weiß, so dass die darunter liegenden Datenpunkte verschwinden und dann geom Punktposition unter Verwendung ausweichen (0,4))

ezPlot(data, 
    dv = .(DepVar), 
    wid = .(Sub), # subject 
    within = .(Con), 
    between=.(Group), 
    split=.(Group), 
    do_bars=TRUE, 
    type = 2, 
    x = .(Con))+ 
     scale_color_manual(values=c("white", "white"))+ 
     geom_point(aes(fill=Group), color="black", pch= 21, size= 3, position=position_dodge(0.4))+ 
     geom_line(aes(group = Group), lty = 3, lwd = 1.3, color='black') 

enter image description here

jedoch möchte ich die Fehlerleiste geplottet haben und ich weiß nicht, wie dies zu erreichen ist oder ob andere Problemumgehungen p sind Möglich. Ich würde gerne bei ezplot bleiben. Vielen Dank!

Antwort

0

Eine Möglichkeit ist print_code = TRUE gesetzt verwenden, um Daten zu erzeugen werden aufgetragen, sowie die ggplot Code:

library(ggplot2) 
stats <- ezPlot(data, 
    dv = .(DepVar), 
    wid = .(Sub), # subject 
    within = .(Con), 
    between=.(Group), 
    split=.(Group), 
    do_bars=TRUE, 
    type = 2, 
    x = .(Con), 
    print_code = TRUE) 

Ändern Sie dann manuell den Code position = position_dodge(0.4) zu jedem geom hinzuzufügen, dann die ggplot laufen Code.

Eine effizientere Art und Weise, das Gleiche zu tun, den Code als Zeichenvektor capture.output wäre, verwenden gsubposition = position_dodge(0.4) hinzufügen möchten, dann eval(parse(text = ...)) der modifizierte Code:

gg_code <- capture.output(stats <- ezPlot(data, 
    dv = .(DepVar), 
    wid = .(Sub), # subject 
    within = .(Con), 
    between=.(Group), 
    split=.(Group), 
    do_bars=TRUE, 
    type = 2, 
    x = .(Con), 
    print_code = TRUE)) 
gg_code <- gsub("alpha", "position = position_dodge(0.4), alpha", gg_code) 
eval(parse(text = paste(gg_code, collapse = ""))) 

Ausgang:

enter image description here