Regrouper plusieurs graphes sur une page

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

Regrouper plusieurs graphes sur une page

Messagepar Patricia OBEID » 13 Oct 2022, 09:36

Bonjour à tous,
J'ai une analyse avec plusieurs variables et je souhaiterais visualiser sur 2 pages 24 graphiques (soit 12 par page).
Ici, j'ai réduit mes datas à 1 seule variable "Area".
J'ai 8 conditions (Well) notées C03 à C10.
Je souhaite l'histogramme de l'aire pour chaque condition.

En écrivant ce qui suit, j'obtiens un graphique png pour chaque condition.

Code : Tout sélectionner

for (i in levels(plate$Well)) {                 
  plaque <- plate[which(plate$Well == i),]
  png(file = sprintf("03_Graphes/Hist_Area_%s.png",i))
  hist(plaque$Area,50,main=i)
  # savePlot (filename="VisuPlate10X_M1", type= "png")
  dev.off()
}


Maintenant j'aimerais pouvoir créer un pdf ou un graphe png qui me permette de visualiser plusieurs graphes en même temps.
Pour mon data frame complet, j'ai 24 conditions. Je souhaite donc pouvoir visualiser les 24 histogrammes sur la même page ou, s'ils sont trop petits, sur 2 pages (4x3/page).
J'ai testé plusieurs choses (par(mfrow = c(6,4)), layout(matrix...)) mais à chaque fois j'ai un message d'erreur "figure margins too large" ou " dev.off() null device 1" selon ce que j'ai testé.

Je n'arrive pas à débloquer la situation.
Pouvez-vous m'aider s'il vous plait ?
Je vous remercie par avance.
Très bonne journée
Patricia

Voici mon dataframe : plate

Code : Tout sélectionner

plate->structure(list(Well = c("C03", "C03", "C03", "C03", "C03", "C03",
"C03", "C03", "C03", "C03", "C03", "C03", "C03", "C03", "C03",
"C03", "C03", "C03", "C03", "C03", "C03", "C03", "C03", "C03",
"C03", "C03", "C03", "C03", "C03", "C03", "C03", "C03", "C03",
"C03", "C03", "C03", "C03", "C03", "C03", "C04", "C04", "C04",
"C04", "C04", "C04", "C04", "C04", "C04", "C04", "C04", "C04",
"C04", "C04", "C04", "C04", "C04", "C04", "C04", "C04", "C04",
"C04", "C04", "C04", "C04", "C04", "C04", "C05", "C05", "C05",
"C05", "C05", "C05", "C05", "C05", "C05", "C05", "C05", "C05",
"C05", "C05", "C05", "C05", "C05", "C05", "C05", "C05", "C05",
"C05", "C05", "C05", "C06", "C06", "C06", "C06", "C06", "C06",
"C06", "C06", "C06", "C06", "C06", "C06", "C06", "C06", "C06",
"C06", "C06", "C06", "C06", "C06", "C06", "C06", "C06", "C06",
"C06", "C06", "C07", "C07", "C07", "C07", "C07", "C07", "C07",
"C07", "C07", "C07", "C07", "C07", "C07", "C07", "C07", "C07",
"C07", "C07", "C07", "C07", "C07", "C07", "C07", "C07", "C07",
"C08", "C08", "C08", "C08", "C08", "C08", "C08", "C08", "C08",
"C08", "C08", "C08", "C08", "C08", "C08", "C08", "C08", "C08",
"C08", "C08", "C08", "C08", "C08", "C08", "C08", "C08", "C08",
"C08", "C08", "C08", "C08", "C08", "C08", "C08", "C08", "C08",
"C08", "C09", "C09", "C09", "C09", "C09", "C09", "C09", "C09",
"C09", "C09", "C09", "C09", "C09", "C09", "C09", "C09", "C09",
"C09", "C09", "C09", "C09", "C09", "C09", "C09", "C10", "C10",
"C10"), Well_ROI = c("C03_5", "C03_6", "C03_14", "C03_19", "C03_23",
"C03_24", "C03_27", "C03_29", "C03_30", "C03_31", "C03_32", "C03_33",
"C03_34", "C03_35", "C03_39", "C03_40", "C03_41", "C03_42", "C03_43",
"C03_44", "C03_45", "C03_46", "C03_47", "C03_51", "C03_55", "C03_56",
"C03_58", "C03_59", "C03_60", "C03_61", "C03_62", "C03_63", "C03_64",
"C03_69", "C03_71", "C03_72", "C03_74", "C03_75", "C03_80", "C04_5",
"C04_25", "C04_30", "C04_31", "C04_32", "C04_33", "C04_36", "C04_39",
"C04_43", "C04_44", "C04_45", "C04_46", "C04_47", "C04_49", "C04_50",
"C04_53", "C04_54", "C04_57", "C04_58", "C04_62", "C04_63", "C04_65",
"C04_67", "C04_68", "C04_70", "C04_72", "C04_77", "C05_5", "C05_13",
"C05_16", "C05_18", "C05_19", "C05_20", "C05_21", "C05_22", "C05_23",
"C05_24", "C05_25", "C05_27", "C05_31", "C05_32", "C05_33", "C05_34",
"C05_36", "C05_37", "C05_39", "C05_42", "C05_43", "C05_44", "C05_54",
"C05_56", "C06_1", "C06_14", "C06_15", "C06_23", "C06_25", "C06_26",
"C06_27", "C06_28", "C06_30", "C06_32", "C06_33", "C06_34", "C06_35",
"C06_37", "C06_42", "C06_44", "C06_45", "C06_51", "C06_52", "C06_53",
"C06_55", "C06_57", "C06_63", "C06_66", "C06_67", "C06_68", "C07_4",
"C07_5", "C07_9", "C07_11", "C07_14", "C07_19", "C07_22", "C07_23",
"C07_24", "C07_25", "C07_26", "C07_27", "C07_28", "C07_29", "C07_36",
"C07_37", "C07_38", "C07_42", "C07_44", "C07_45", "C07_46", "C07_47",
"C07_48", "C07_53", "C07_60", "C08_1", "C08_4", "C08_9", "C08_16",
"C08_17", "C08_19", "C08_20", "C08_25", "C08_26", "C08_27", "C08_28",
"C08_29", "C08_30", "C08_31", "C08_32", "C08_33", "C08_34", "C08_37",
"C08_39", "C08_40", "C08_41", "C08_42", "C08_43", "C08_44", "C08_45",
"C08_46", "C08_51", "C08_55", "C08_56", "C08_65", "C08_66", "C08_68",
"C08_69", "C08_70", "C08_72", "C08_76", "C08_84", "C09_2", "C09_6",
"C09_16", "C09_22", "C09_23", "C09_24", "C09_26", "C09_30", "C09_32",
"C09_36", "C09_38", "C09_41", "C09_44", "C09_47", "C09_49", "C09_50",
"C09_52", "C09_54", "C09_55", "C09_57", "C09_58", "C09_60", "C09_61",
"C09_68", "C10_17", "C10_29", "C10_37"), Area = c(21605.17, 48838.57,
86734.26, 39991.84, 12857.47, 37400.54, 28834.4, 17280.83, 69701.01,
20796.42, 41411.28, 63198, 53030.86, 21440.12, 27315.93, 37681.13,
85017.73, 27398.45, 60755.25, 53014.36, 42319.06, 12081.73, 39579.21,
54499.82, 31640.26, 51528.9, 37037.43, 6915.63, 54780.4, 47056.02,
32135.42, 31376.18, 21324.58, 34611.18, 22777.03, 89507.12, 46313.29,
14375.94, 47782.24, 87675.05, 56430.91, 10398.21, 36591.79, 59847.47,
52568.72, 17396.37, 44431.71, 15003.13, 12279.79, 84142.96, 40767.58,
48904.59, 60854.28, 36657.81, 54895.94, 81832.25, 30963.55, 44976.38,
62339.73, 24807.15, 34611.18, 72622.41, 74388.45, 46379.31, 51215.3,
39843.29, 61745.55, 47452.14, 49597.8, 116261.87, 62669.84, 50158.98,
23767.33, 58923.18, 43457.91, 21291.57, 56282.37, 59137.75, 93501.35,
53080.38, 45422.01, 56282.37, 49911.4, 87972.14, 73579.7, 81914.77,
34924.78, 51594.92, 46098.72, 56942.57, 43408.39, 88648.85, 57256.17,
93583.87, 39166.58, 51842.5, 15927.41, 68875.75, 75675.85, 55226.04,
12395.32, 20482.82, 34297.58, 63528.1, 21572.16, 23123.63, 83713.83,
66994.17, 67076.7, 45405.51, 32944.16, 40239.42, 47732.73, 26573.2,
51809.49, 39348.14, 47336.61, 62207.69, 31607.25, 48706.53, 56711.5,
97248.01, 50026.94, 8483.62, 67802.92, 22810.04, 70608.79, 18898.33,
42863.73, 62702.85, 58576.57, 30303.35, 21423.61, 99839.3, 21654.68,
57272.67, 17231.32, 71665.11, 39463.68, 37185.97, 25467.36, 27249.91,
42319.06, 81139.03, 87245.92, 34066.51, 23503.25, 36113.14, 35023.81,
27712.05, 29659.65, 50423.06, 74289.42, 68033.99, 82096.33, 9738,
29329.55, 32911.15, 49531.78, 43210.33, 24146.95, 20928.46, 55919.25,
20812.92, 44976.38, 68892.26, 9473.92, 67934.96, 41609.34, 92857.65,
38341.33, 9985.58, 49284.21, 35502.45, 57107.62, 46098.72, 24229.48,
25186.77, 57355.2, 39463.68, 90711.99, 26177.08, 63214.5, 61431.95,
10167.14, 40718.06, 48194.87, 57635.78, 30881.03, 56959.07, 7278.75,
36030.62, 49713.34, 10398.21, 17000.25, 32515.03, 20944.96, 12378.82,
27827.59, 16208, 26061.54, 71169.96, 28768.38, 62191.19, 69040.8
)), class = "data.frame", row.names = c(NA, -205L))

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Regrouper plusieurs graphes sur une page

Messagepar Logez Maxime » 17 Oct 2022, 08:52

Bonjour,

C'est un problème de place sur le graphique. Tu veux représenter beaucoup de choses dans un espace restreint.
Chaque graphique va être constitué de la fenêtre graphique en elle même qui correspond aux données à représenter et aux fameuses marges dans lesquelles vont être inscrites les "metadata", comme les légendes des axes (valeurs des échelles et titre), le titre de la figure graphique, etc.

Pour ton problème, tu peux :
- augementer la taille de la fenêtre graphique (windows, width, height, etc).
- réduire le nombre de graphique par page (mfrow = c(4,3), mfrow = c(3,2)...)
- réduire les marges autour (par(mar =c(3,2,3,.5))

Pour les marges attention. Si tu les réduis trop tu peux perdre des légendes. Par exemple si tu fais (mar = c(4,4,0.1,0.1)) tu vas gagner de la place pour la partie graphique mais tu ne pourras plus voir le titre. Après tu peux aussi faire basculer le titre l'intérieur de la fenêtre graphique si ça ne gêne pas la lecture.

Cordialement,
Maxime

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

Re: Regrouper plusieurs graphes sur une page

Messagepar Patricia OBEID » 17 Oct 2022, 09:13

Bonjour Maxime
Merci pour les pistes que tu m'as données.
J'ai joué avec les marges (par(mar =c(2.5,2.5,1.5,1.5)) et j'arrive à visualiser mes 24 graphiques.
Mais comme tu le dis, ça fait bcp de choses dans un espace restreint.
C'était ma 1ère étape.
J'essaye maintenant de créer un pdf qui compterait 6 pages avec chacune 4 graphiques.
Une idée à me suggérer ?
Encore merci de ton aide.
Bonne journée,
Patricia

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Regrouper plusieurs graphes sur une page

Messagepar Logez Maxime » 17 Oct 2022, 14:00

En fait il n'y a pas grand chose à faire.
Tu ouvres ton pdf avec la commande pdf("nom.pdf") tu lances la commande par pour définir les paramètres de ta fenêtre graphique (par(mfrow = c(2,2)), tu lances ta boucle pour représenter tes graphs et dès que la fenêtre sera pleine de 4 graphiques il ouvrira automatiquement une nouvelle page dans le pdf. Une fois ta boucle finie tu tapes dev.off() pour terminer la création de ton pdf.

Code : Tout sélectionner

mat <- matrix(rnorm(100*24), ncol = 24) # pour l'exemple
colnames(mat) <- LETTERS[1:24]
pdf("test.pdf")
par(mfrow = c(2,2), mar = c(2.5,2.5,1.5,1.5))
for (i in 1:24) {
  hist(mat[,i], main = colnames(mat)[i])
  }
dev.off()
Cordialement,
Maxime

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

Re: Regrouper plusieurs graphes sur une page

Messagepar Patricia OBEID » 17 Oct 2022, 14:31

Oui, effectivement, ce n'est pas grand chose ..
Mais j'avais probablement un problème d'écriture car j'avais indiqué sur 2 lignes mfrow et mar
par(mfrow = c(6,4))
par(mar=c(2.5,2.5,1.5,1.5))

Merci beaucoup de ton aide.
Bon après-midi,
Patricia


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité