2015-04-29 7 views
14

Ich bin neu in R und habe keine Programmierung zuvor getan ...In R, mit dem Fehler zu tun: ggplot2 nicht weiß, wie mit den Daten der Klasse behandeln ein numerischen

Wenn ich versuche zu erstellen Boxdiagramm mit Standardfehlerbalken Ich erhalte die im Titel erwähnte Fehlermeldung.

verwendete ich ein Skript, das ich auf R-Kochbuch gefunden, das ich ein bisschen gezwickt:

ggplot(GVW, aes(x="variable",y="value",fill="Genotype")) + 
    geom_bar(position=position_dodge(),stat="identity",colour="black", size=.3)+ 
    geom_errorbar(data=GVW[1:64,3],aes(ymin=value-seSKO, ymax=value+seSKO), size=.3, width=.2, position=position_dodge(.9))+ 
    geom_errorbar(data=GVW[65:131,3],aes(ymin=value-seSWT, ymax=value+seSWT), size=.3, width=.2, position=position_dodge(.9))+ 
    geom_errorbar(data=GVW[132:195,3],aes(ymin=value-seEKO, ymax=value+seEKO), size=.3, width=.2, position=position_dodge(.9))+ 
    geom_errorbar(data=GVW[196:262,3],aes(ymin=value-seEWT, ymax=value+seEWT), size=.3, width=.2, position=position_dodge(.9))+ 
    xlab("Time")+ 
    ylab("Weight [g]")+ 
    scale_fill_hue(name="Genotype", breaks=c("KO", "WT"), labels=c("Knock-out", "Wild type"))+ 
    ggtitle("Effect of genotype on weight-gain")+ 
    scale_y_continuous(breaks=0:20*4) + 
    theme_bw() 

Data<- data.frame(
    Genotype<- sample(c("KO","WT"), 262, replace=T), 
    variable<- sample(c("Start","End"), 262, replace=T), 
    value<- runif(262,20,40) 
) 
names(Data)[1] <- "Genotype" 
names(Data)[2] <- "variable" 
names(Data)[3] <- "value" 

Antwort

18

Der Fehler tritt auf, weil Sie einen numerischen Vektor data in geom_errorbar abzubilden versuchen: GVW[1:64,3]. ggplot funktioniert nur mit data.frame.

Im Allgemeinen sollten Sie keine Unterklasse innerhalb von ggplot Anrufe. Sie tun dies, weil Ihre Standardfehler in vier separaten Objekten gespeichert sind. Fügen Sie sie zu Ihrem ursprünglichen data.frame hinzu und Sie können alles in einem Anruf plotten.

Hier mit einer dplyr Lösung, um die Daten zusammenzufassen und den Standardfehler vorher zu berechnen.

library(dplyr) 
d <- GVW %>% group_by(Genotype,variable) %>% 
    summarise(mean = mean(value),se = sd(value)/sqrt(n())) 

ggplot(d, aes(x = variable, y = mean, fill = Genotype)) + 
    geom_bar(position = position_dodge(), stat = "identity", 
     colour="black", size=.3) + 
    geom_errorbar(aes(ymin = mean - se, ymax = mean + se), 
     size=.3, width=.2, position=position_dodge(.9)) + 
    xlab("Time") + 
    ylab("Weight [g]") + 
    scale_fill_hue(name = "Genotype", breaks = c("KO", "WT"), 
     labels = c("Knock-out", "Wild type")) + 
    ggtitle("Effect of genotype on weight-gain") + 
    scale_y_continuous(breaks = 0:20*4) + 
    theme_bw() 
+0

Vielen Dank Scoa, die Daten sind jetzt wie geplant geplottet. Obwohl eine der Knock-Out-Spalten fehlt, aber ich sollte das lösen können. – embacify