[RESOLU] Création d'objets graphiques "ggplot" à partir d'une boucle for

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Auguste Blam
Messages : 4
Enregistré le : 18 Oct 2018, 06:39

[RESOLU] Création d'objets graphiques "ggplot" à partir d'une boucle for

Messagepar Auguste Blam » 21 Nov 2018, 15:34

Bonjour à tous,

A l'aide d'une boucle "for", j'ai créé des graphiques automatiquement enregistrés dans mon répertoire de travail.
Les graphiques produits sont ceux que j'attends et je peux ouvrir les images générées sans soucis.

Je souhaite également créer un objet dans R, propre à chaque graphique généré par la fonction.
Cela me permettra d’appeler individuellement les graphiques, pour les grouper comme bon me semble par exemple avec la fonction ggarrange.

Idéalement j'aimerais inclure le nom du "Compose" dans le nom de l'objet généré, propre à chaque graphique.
En lançant la boucle j'aurais ainsi 8 objets créés du type :
"CitratebarplotE"
"GlucosebarplotE"
....
"SaccharosebarplotE"



Infos :
Ma variable "Compose" du tableau GClong est composée de différents sucres, 8 différents.
Lorsque je relance le l'objet "barplotE" j'obtiens le graphique généré pour le dernier "Compose" à savoir le saccharose.


Voici le code en question, l'objet barplot se trouve vers la fin :

Code : Tout sélectionner

GC<- read.table("...")

#Verification et correction de base du jeu de donnees
summary(GC)
#Conserver les variables positives
GC<-GC[,c(1:5,8,10,12,15,19,25,27,28)]

#Convertir le jeu de données en format long
GClong<-gather(data = GC,key = Compose,value = Concentration, Citrate:Saccharose)
GClong$Stress<-factor(GClong$Stress,levels=c("T","S2","H1","H1S2"))

#Fonction erreur standard
stderr <- function(x) sqrt(var(x,na.rm=TRUE)/length(na.omit(x)))


#Boucle graphique
for (gc in unique(GClong$Compose)){
  name<-sprintf("%sExp",gc)
  #sous fichier par compose
  sous_fichier<-filter(GClong,Genotype=="E",Compose==gc)
  means<-aggregate(Concentration~Stress,sous_fichier,mean)
  error<-aggregate(Concentration~Stress,sous_fichier,stderr)
 
  test<-compare_means(Concentration~Stress,data = sous_fichier)
  index<-which(test$p.signif!="ns")

  if (length(index)==0)
  {listecomp=""
  } else {
    longueurliste<-seq(from=0, to= 0,length.out=length(index))
    listecomp=list(longueurliste)
    for (i in seq(1,length(index))){
      liste1=test$group1[i]
      liste2=test$group2[i]
      listecomp[[i]]<-c(liste1,liste2)
    }}
 
 
 
 
  #Barplot
  name2<-paste(sprintf("%se",gc),'.png')
  png(file=name2)
 
barplotE<-ggbarplot(sous_fichier,
                            x="Stress", y="Concentration",add="mean_se",
                            color="black",fill="Stress",palette=c("gray45", "royalblue2", "brown2","mediumpurple"),alpha=0.5,
                            xlab="E",ylab=sprintf("%s (nmol/mg MS)",gc))+
    geom_text(data=means,aes(label=round(Concentration,2),y=Concentration/2))+
    stat_compare_means(
      comparisons=listecomp,
      method = "wilcox.test",label="p.signif",p.adjust.method="bonferroni")
  theme(legend.position = 'none')
 
 
 
 
  print(barplotE)
  dev.off()
}


Naïvement j'ai essayé de remplacer le nom attribué à mon ggplot par :
sprintf("%sbarplotE",gc)<-...

mais cela ne fonctionne pas


Auriez vous une idée ?


Restant disponible pour toute précision,

Auguste B.

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Création d'objets graphiques "ggplot" à partir d'une boucle for

Messagepar Pierre-Yves Berrard » 21 Nov 2018, 16:57

Bonjour,

La fonction assign répond à cette problématique.
PY

Auguste Blam
Messages : 4
Enregistré le : 18 Oct 2018, 06:39

Re: Création d'objets graphiques "ggplot" à partir d'une boucle for

Messagepar Auguste Blam » 22 Nov 2018, 07:24

Bonjour,

En effet, la fonction assign me permet de faire ce que j'attendais, merci !


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité

cron