2015-04-29 14 views
14

Jestem nowy na R i nie zrobić każdy programowanie przed ...W R czynienia z błędem: ggplot2 nie wie, jak radzić sobie z danymi liczbowymi klasy

Kiedy próba stworzenia box box ze standardowymi paskami błędów Otrzymuję komunikat o błędzie wymieniony w tytule.

użyłem skryptu znalazłem na R Cookbook które tweaked trochę:

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" 

Odpowiedz

18

Błąd dzieje się z powodu staramy się odwzorować numerycznej wektorowej do data w geom_errorbar: GVW[1:64,3]. ggplot działa tylko z data.frame.

Ogólnie, nie należy wykonywać podzbiorów wewnątrz połączeń ggplot. Robisz to, ponieważ twoje standardowe błędy są przechowywane w czterech osobnych obiektach. Dodaj je do oryginalnego data.frame, a będziesz mógł wydrukować wszystko w jednym wywołaniu.

Tutaj z rozwiązaniem dplyr w celu podsumowania danych i wcześniejszego obliczenia błędu standardowego.

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

Dziękuję bardzo Scoa, dane są teraz zgodne z planem. Chociaż brakuje jednej z nokautowanych kolumn, ale powinienem móc to rozwiązać. – embacify

Powiązane problemy