Gruppierten barplot in R mit Fehlerbalken
Ich würde gerne zeichnen einen gruppierten barplot mit Fehlerbalken. Hier ist die Art von Figur, die ich haben in der Lage zu bekommen bis jetzt, und das ist ok für das, was ich brauche:
Und hier ist mein Skript:
#create dataframe
Gene<-c("Gene1","Gene2","Gene1","Gene2")
count1<-c(12,14,16,34)
count2<-c(4,7,9,23)
count3<-c(36,22,54,12)
count4<-c(12,24,35,23)
Species<-c("A","A","B","B")
df<-data.frame(Gene,count1,count2,count3,count4,Species)
df
mean1<-mean(as.numeric(df[1,][c(2,3,4,5)]))
mean2<-mean(as.numeric(df[2,][c(2,3,4,5)]))
mean3<-mean(as.numeric(df[3,][c(2,3,4,5)]))
mean4<-mean(as.numeric(df[4,][c(2,3,4,5)]))
Gene1SpeciesA.stdev<-sd(as.numeric(df[1,][c(2,3,4,5)]))
Gene2SpeciesA.stdev<-sd(as.numeric(df[2,][c(2,3,4,5)]))
Gene1SpeciesB.stdev<-sd(as.numeric(df[3,][c(2,3,4,5)]))
Gene2SpeciesB.stdev<-sd(as.numeric(df[4,][c(2,3,4,5)]))
ToPlot<-c(mean1,mean2,mean3,mean4)
#plot barplot
plot<-matrix(ToPlot,2,2,byrow=TRUE) #with 2 being replaced by the number of genes!
tplot<-t(plot)
BarPlot <- barplot(tplot, beside=TRUE,ylab="count",
names.arg=c("Gene1","Gene2"),col=c("blue","red"))
#add legend
legend("topright",
legend = c("SpeciesA","SpeciesB"),
fill = c("blue","red"))
#add error bars
ee<-matrix(c(Gene1SpeciesA.stdev,Gene2SpeciesA.stdev,Gene1SpeciesB.stdev,Gene2SpeciesB.stdev),2,2,byrow=TRUE)*1.96/sqrt(4)
tee<-t(ee)
error.bar(BarPlot,tplot,tee)
Das problem ist, dass ich das tun müssen, für 50 Gene, und 4 Arten, also mein Skript bekommen, super super lang und ich denke, dies ist nicht optimiert... ich habe versucht, um Hilfe zu finden hier aber ich kann nicht herausfinden, einen besseren Weg, das zu tun, was ich möchte. Wenn ich nicht brauchen, Fehlerbalken konnte ich anpassen dieses Skript aber der schwierige Teil ist zu mischen ggplot schöne barplots und Fehler bars! 😉
Wenn du keine Ahnung hast, optimieren mein Skript, ich würde wirklich zu schätzen! 🙂
Vielen Dank!
t(plot)
Sie komplett vertauscht das gen 😉
InformationsquelleAutor tlorin | 2015-04-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ausgehend von der definition von
df
Sie können dies tun, in ein paar Zeilen:> df1 <- transform(df, mean=rowMeans(df[cols]), sd=apply(df[cols],1, sd))
Error in
[.Daten.Rahmen(df, cols) : object 'cols' not found
sorry, ich habe vergessen, was war
cols
(was der Fehler sagt eigentlich ;)) ist es nun editiert!Perfekt! Vielen Dank!! 🙂
keine Sorge, nur im Kopf behalten, wenn Sie Daten haben.Rahmen, der ggplot ist SEHR passend!
InformationsquelleAutor Colonel Beauvel