Сгруппированный барплот в R с ошибками

Я хотел бы нарисовать сгруппированный барплот с барами ошибок. Вот такая фигура, которую я смог получить до сих пор, и это нормально для того, что мне нужно:

И вот мой сценарий:

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

Проблема в том, что мне нужно сделать это для 50 генов и 4 видов, так что мой сценарий станет супер-длинным, и я думаю, что это не оптимизировано ... Я пытался найти помощьВот но я не могу найти лучший способ сделать то, что хотел бы. Если бы я не нуждался в барах ошибок, я мог бы приспособитьсяэтот скрипт но самое сложное в том, чтобы смешать красивые барплоты и ошибки в ggplot! ;)

Если у вас есть идея оптимизировать мой сценарий, я был бы очень признателен! :)

Большое спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос