Boucles pour tracer des plots

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

Patricia OBEID
Messages : 68
Enregistré le : 10 Avr 2017, 19:03

Boucles pour tracer des plots

Messagepar Patricia OBEID » 20 Oct 2018, 14:59

Bonjour à tous,
je souhaite tracer plusieurs plots sur une même page mais je rencontre plusieurs problèmes.
J'ai plusieurs conditions "Trait1" pour lesquelles je voudrais voir apparaître le nuage de points des "nCells" en fonction de "day".
L'idée serait ensuite de mettre en rouge les points correspondant à Trait2a="ATB" en bleu et ceux de Trait2a="woATB" en rouge.

J'ai commencé à balbutier un script mais au lieu de voir un nuage de points, j'obtiens un boxplot (le même pour tous les "Trait1") ?!

Voici mon dataframe :

Code : Tout sélectionner

plate <- structure(list(Cond = structure(1:28, .Label = c("j1_05_woATB",
"j1_10_woATB", "j1_20_woATB", "j1_50_woATB", "j2_05_ATB", "j2_05_woATB",
"j2_10_ATB", "j2_10_woATB", "j2_20_ATB", "j2_20_woATB", "j2_50_ATB",
"j2_50_woATB", "j3_05_ATB", "j3_05_woATB", "j3_10_ATB", "j3_10_woATB",
"j3_20_ATB", "j3_20_woATB", "j3_50_ATB", "j3_50_woATB", "j4_05_ATB",
"j4_05_woATB", "j4_10_ATB", "j4_10_woATB", "j4_20_ATB", "j4_20_woATB",
"j4_50_ATB", "j4_50_woATB"), class = "factor"), nCells = c(47.1852,
53.5185, 53.7778, 50.5556, 95.1481, 120.63, 96.9259, 125.519,
86.8148, 105.296, 84.5185, 89.8889, 182.259, 281.37, 203.111,
245.778, 226.333, 302.259, 222.222, 281.741, 381.741, 587.815,
387.333, 619.593, 486.852, 733.704, 480.259, 624.963), DeadCells = c(2.19499,
1.12132, 2.61569, 1.97872, 1.8776, 1.11307, 3.62967, 1.19153,
5.71182, 2.22468, 6.04897, 1.54371, 30.909, 1.31003, 10.0827,
1.81695, 9.6289, 2.2471, 15.975, 6.1745, 4.5747, 1.05255, 7.50961,
2.63833, 4.14927, 4.94735, 2.96878, 15.829), day = structure(c(1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("j1",
"j2", "j3", "j4"), class = "factor"), Trait = structure(c(2L,
4L, 6L, 8L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 1L, 2L, 3L, 4L, 5L,
6L, 7L, 8L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L), .Label = c("05_ATB",
"05_woATB", "10_ATB", "10_woATB", "20_ATB", "20_woATB", "50_ATB",
"50_woATB"), class = "factor"), Trait1 = structure(c(1L, 2L,
3L, 4L, 1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L, 1L, 1L, 2L, 2L, 3L, 3L,
4L, 4L, 1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L), .Label = c("05", "10",
"20", "50"), class = "factor"), Trait2a = structure(c(1L, 1L,
1L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L,
1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("ATB", "woATB"
), class = "factor"), Trait2b = structure(c(2L, 2L, 2L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("ATB", "woATB"), class = "factor")), .Names = c("Cond",
"nCells", "DeadCells", "day", "Trait", "Trait1", "Trait2a", "Trait2b"
), row.names = c(NA, -28L), class = "data.frame")


et mon script :

Code : Tout sélectionner

layout(matrix(1:4,nrow=2))    # on divise la fenêtre en 4

for (i in levels(plate$Trait1)) {      #pour les 4 types de traitement : [EGF] = 05, 10, 20 ou 50
  plot(plate$day,plate$nCells, type="p", main =i, ylab="nCells / Field")       #on trace un nuage de points de l'ensemble des données
}


Mon idée serait de poursuivre avec le script suivant mais je suis bloquée car la première partie ne me donne pas un nuage de points ...

Code : Tout sélectionner

layout(matrix(1:4,nrow=2))    # on divise la fenêtre en 4

for (i in levels(plate$Trait1)) {      #pour les 4 types de traitement : [EGF] = 05, 10, 20 ou 50
  plot(plate$day,plate$nCells, type="p", main =i, ylab="nCells / Field")       #on trace un nuage de points de l'ensemble des données
}

 #on selectionne les donnees avec ATB et on les trace en rouge puis woATB et on les trace en bleu
  DataATB = which(plate$Trait2a =="wATB")
  points(plate$day,plate[DataATB,j], col="red", type="b")
 
  DatawoATB = which(plate$Trait2a =="woATB")
  points(plate$day,plate[DatawoATB,j], col="blue", type="b")
}


Merci par avance de l'aide, des conseils et des pistes que vous pourrez me donner.
Patricia

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

Re: Boucles pour tracer des plots

Messagepar Pierre-Yves Berrard » 20 Oct 2018, 17:04

Bonjour,

Un nuage de points s'obtient à partir de 2 variables numériques. plate$day est catégorielle.
PY

Patricia OBEID
Messages : 68
Enregistré le : 10 Avr 2017, 19:03

Re: Boucles pour tracer des plots

Messagepar Patricia OBEID » 21 Oct 2018, 09:37

Merci Pierre-Yves,
J'obtiens bien des points mais les 4 graphiques sont identiques .. ;-(

Voici le dataframe corrigé :
plate <- structure(list(Cond = structure(1:28, .Label = c("j1_05_woATB",
"j1_10_woATB", "j1_20_woATB", "j1_50_woATB", "j2_05_ATB", "j2_05_woATB",
"j2_10_ATB", "j2_10_woATB", "j2_20_ATB", "j2_20_woATB", "j2_50_ATB",
"j2_50_woATB", "j3_05_ATB", "j3_05_woATB", "j3_10_ATB", "j3_10_woATB",
"j3_20_ATB", "j3_20_woATB", "j3_50_ATB", "j3_50_woATB", "j4_05_ATB",
"j4_05_woATB", "j4_10_ATB", "j4_10_woATB", "j4_20_ATB", "j4_20_woATB",
"j4_50_ATB", "j4_50_woATB"), class = "factor"), nCells = structure(c(1L,
3L, 4L, 2L, 8L, 11L, 9L, 12L, 6L, 10L, 5L, 7L, 13L, 18L, 14L,
17L, 16L, 20L, 15L, 19L, 21L, 25L, 22L, 26L, 24L, 28L, 23L, 27L
), .Label = c("47.1852", "50.5556", "53.5185", "53.7778", "84.5185",
"86.8148", "89.8889", "95.1481", "96.9259", "105.296", "120.63",
"125.519", "182.259", "203.111", "222.222", "226.333", "245.778",
"281.37", "281.741", "302.259", "381.741", "387.333", "480.259",
"486.852", "587.815", "619.593", "624.963", "733.704"), class = "factor"),
DeadCells = structure(c(10L, 3L, 13L, 9L, 8L, 2L, 16L, 4L,
20L, 11L, 21L, 6L, 28L, 5L, 25L, 7L, 24L, 12L, 27L, 22L,
18L, 1L, 23L, 14L, 17L, 19L, 15L, 26L), .Label = c("1.05255",
"1.11307", "1.12132", "1.19153", "1.31003", "1.54371", "1.81695",
"1.8776", "1.97872", "2.19499", "2.22468", "2.2471", "2.61569",
"2.63833", "2.96878", "3.62967", "4.14927", "4.5747", "4.94735",
"5.71182", "6.04897", "6.1745", "7.50961", "9.6289", "10.0827",
"15.829", "15.975", "30.909"), class = "factor"), day = c(1,
1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
4, 4, 4, 4, 4, 4, 4, 4), Trait = structure(c(2L, 4L, 6L,
8L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 1L, 2L, 3L, 4L, 5L, 6L,
7L, 8L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L), .Label = c("05_ATB",
"05_woATB", "10_ATB", "10_woATB", "20_ATB", "20_woATB", "50_ATB",
"50_woATB"), class = "factor"), Trait1 = structure(c(1L,
2L, 3L, 4L, 1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L, 1L, 1L, 2L, 2L,
3L, 3L, 4L, 4L, 1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L), .Label = c("05",
"10", "20", "50"), class = "factor"), Trait2a = structure(c(1L,
1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L,
1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("ATB",
"woATB"), class = "factor"), Trait2b = structure(c(2L, 2L,
2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L,
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("ATB",
"woATB"), class = "factor")), .Names = c("Cond", "nCells",
"DeadCells", "day", "Trait", "Trait1", "Trait2a", "Trait2b"), row.names = c(NA,
-28L), class = "data.frame")


et mon script

Code : Tout sélectionner

x11()
layout(matrix(1:4,nrow=2))    # on divise la fenêtre en 4

for (i in levels(plate$Trait1)) {      #pour les 4 types de traitement : [EGF] = 05, 10, 20 ou 50
  plot(plate$day,plate$nCells, type="p", main =i, ylab="nCells / Field")       #on trace un nuage de points de l'ensemble des données
#}

 #on selectionne les donnees avec ATB et on les trace en rouge puis woATB et on les trace en bleu
  DataATB <- plate$Trait2a =="ATB"
  for (j in 1:length(DataATB)) {
  points(plate$day[DataATB],plate$nCells[DataATB], col="red", type="p")}
 
  DatawoATB = plate$Trait2b =="woATB"
  for (k in 1:length(DatawoATB)) {
  points(plate$day[DatawoATB],plate$nCells[DatawoATB], col="blue", type="p")
}
}


Merci de m'aider à trouver ce qui ne va pas.
Bonne journée
Patricia

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

Re: Boucles pour tracer des plots

Messagepar Pierre-Yves Berrard » 21 Oct 2018, 14:08

Le problème est qu'à chaque boucle l'ensemble des données est utilisé.
Il faudrait ajouter avant plot une instruction qui filtre en fonction de i.
PY


Retourner vers « Questions en cours »

Qui est en ligne

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