Représentation Graphique

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

Juliette Nectoux
Messages : 3
Enregistré le : 04 Mar 2019, 08:34

Représentation Graphique

Messagepar Juliette Nectoux » 04 Mar 2019, 10:05

Bonjour

J’aimerais savoir quel type de représentation graphique me permettrait de reproduire ce schéma obtenu à partir de
- 3 jeux de données (forward, reverse, fœtus) contenant les variables nominales suivantes : 0 (gris) , 1 (rouge) ou 2 (vert)
- en abscisse : des coordonées génomiques (variables ordinales discrètes correspondant à des positions successives le long d’un chromosome).
Image

Merci pour votre aide!
A noter : je suis archi débutante en R...

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Représentation Graphique

Messagepar Mickael Canouil » 04 Mar 2019, 12:07

Bonjour,

Tout d'abord, une package pour faire des dessins, ici le package utilisé est "ggplot2", dont la documentation est bien fournie avec plein d'exemple: https://ggplot2.tidyverse.org/reference/index.html

Code : Tout sélectionner

library(ggplot2)


Ensuite, un petit data.frame (tableau) contenant ce qu'on souhaite tracer. (fausse donnée pour l'exemple)

Code : Tout sélectionner

n_position = 50
dta <- data.frame(
  genotype = rbinom(n_position*3, 2, prob = 0.5),
  strand = factor(
    x = rep(c("foetus", "reverse", "forward"), each = n_position),
    levels = c("foetus", "reverse", "forward")
  ),
  position = factor(rep(1:n_position, time = 3))
)


Et la partie pour faire le dessin

Code : Tout sélectionner

# base du dessin, on définit quel objet (argument "data") contient ce qu'on veut dessiner et quelle colonne sert à quoi via la fonction aes() (argument "mapping")
ggplot(data = dta, mapping = aes(x = position, y = strand, fill = factor(genotype))) +
  geom_tile() + # trace des "carrés" aux intersections entre x et y
  scale_fill_manual( # Change les valeurs, noms de l'échelle de couleur, etc.
    name = NULL, # aucun titre de légende
    breaks = c(0, 1, 2), # les valeurs de la colonne genotype
    labels = c("0: ?", "1: MUTE", "2: SAIN"), # les noms à afficher
    values = c("grey", "red", "green") # les couleurs correspondantes
  )+
  scale_x_discrete(expand = c(0, 0)) + # enlève l'espace additionnel en abscisse (essayer avec ou sans cette ligne pour voir la différence)
  scale_y_discrete(expand = c(0, 0)) + # enlève l'espace additionnel en ordonnée (essayer avec ou sans cette ligne pour voir la différence)
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5)) + # change la façon dont sont afficher le texte des graduations en abscisse
  labs( # les titres du graphique
    x = "Position sur le chromosome ...",
    y = NULL, # aucun titre
    title = "Reconstruction des blocs ..."
  )


Image

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

Juliette Nectoux
Messages : 3
Enregistré le : 04 Mar 2019, 08:34

Re: Représentation Graphique

Messagepar Juliette Nectoux » 05 Mar 2019, 15:23

Bonjour
Un immense merci pour votre réponse rapide (j'ai mis du temps à comprendre que j'avais une réponse!!).
J'obtiens bien un graphe du type souhaité, mais les couleurs ne semblent pas correspondre pas aux valeurs 0, 1 ou 2 qu'il y a dans les cases...


Mon objectif était d'avoir une correspondance telle que dans cet exemple (moi, j'ai des grands tableaux avec mes 0, 1 et 2 à chaque coordonnée, et je souhaite juste en faire une représentation graphique)
Image

Or, quand j'utilise ce dataframe et les lignes de code indiquées, j'ai un résultat qui ne correspond pas.
Et j'avoue ne pas les comprendre assez pour savoir quel paramètre modifier ;-)

Image

Encore merci pour votre aide!!
Cordialement
Juliette

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Représentation Graphique

Messagepar Mickael Canouil » 05 Mar 2019, 15:39

Bonjour,

en ajoutant "set.seed" pour avoir un résultat strictement identique.
Mon jeu de donnée est aléatoire. Ainsi, en utilisant set.seed(), je "fixe" le hasard à un cas précis.
J'ai également affiché la valeur textuelle de genotype via le "geom_text()".
Vous pouvez constater que la matrice correspond exactement au graphique

Code : Tout sélectionner

library(ggplot2)

set.seed(05032019)

n_position <- 10
dta <- data.frame(
  genotype = rbinom(n_position*3, 2, prob = 0.5),
  strand = factor(
    x = rep(c("foetus", "reverse", "forward"), each = n_position),
    levels = c("foetus", "reverse", "forward")
  ),
  position = factor(rep(1:n_position, time = 3))
)

ggplot(data = dta, mapping = aes(x = position, y = strand, fill = factor(genotype))) +
  geom_tile() +
  geom_text(mapping = aes(label = genotype)) + # ajoute du texte
  scale_fill_manual(
    name = NULL,
    breaks = c(0, 1, 2),
    labels = c("0: ?", "1: MUTE", "2: SAIN"),
    values = c("grey", "red", "green")
  )+
  scale_x_discrete(expand = c(0, 0)) +
  scale_y_discrete(expand = c(0, 0)) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5)) +
  labs(
    x = "Position sur le chromosome ...",
    y = NULL,
    title = "Reconstruction des blocs ..."
  )

Image
Mickaël
mickael.canouil.fr | rlille.fr

Juliette Nectoux
Messages : 3
Enregistré le : 04 Mar 2019, 08:34

Re: Représentation Graphique

Messagepar Juliette Nectoux » 05 Mar 2019, 16:44

Bonjour
Encore merci de prendre du temps pour nous aider!!
D'après ce que je vois, la représentation graphique colle avec les chiffres qui sont dedans. Par contre, elle ne "colle" pas avec les chiffres qui étaient dans mon dataframe initial, qui était celui-ci.
Image
Encore merci!!
Juliette

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Représentation Graphique

Messagepar Mickael Canouil » 06 Mar 2019, 16:28

Dans l'état, à savoir sans code et données, il n'est pas possible de vous aidez davantage.
Je vous invite à vous documenter plus sur ggplot2 et/ou fournir un code reproductible voire partager vos données
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

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