Cartographie d'un tableau

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

Stéphanie Ployart
Messages : 67
Enregistré le : 19 Juin 2009, 08:05

Cartographie d'un tableau

Messagepar Stéphanie Ployart » 11 Aoû 2010, 09:38

Bonjour,

J'ai un tableau de ce type

Code : Tout sélectionner

X1 A1 10CEB887SAL 0.1083333 0.237500  0.08862876  8.690639 8.705446 8.791045 8.842532  8.932735 9.412791
X2 B1 10CEB901SAL 0.1722222 0.140625  0.09197324  9.270548 9.745050 9.589552 9.897727  9.729821 9.443314
X3 C1 10CEB902SAL 0.1777778 0.225000  0.08026756  9.095890 9.410891 9.116205 9.048701  9.603139 9.111919
X4 D1 10CEB903SAL 0.1444444 0.190625 10.01505017  9.342466 9.324257 9.762260 9.629870 10.011211 9.857558
X5 E1 10CEB910SAL 0.1000000 0.209375  0.10367893 10.004566 9.990099 9.992537 9.990260  9.697309 9.992733
X6 F1 10CEB912SAL 0.1555556 0.196875  0.07692308  9.568493 9.849010 9.989339 9.621753  9.579596 9.915698


Je voudrais faire un graphique qui serait une sorte de cartographie de mon tableau.
Ce tableau représente, par ligne, les résultats pour une souche d'une hybridation avec pour chaque colonne une sonde différente. Je voudrais donc faire un graphique qui représente pour chaque ligne et pour les colonnes ayant les résultats (colonne n°4 à la dernière) une échelle de couleur pour indiquer la valeur.
L'idée serait d'avoir une sorte de damier (nb_lignes *(nb_colonnes-3)) et dans chaque case, la couleur correspondant sur mon échelle à la valeur contenue dans la case.

Je ne sais pas si il existe une fonction R qui permet de faire cela ou bien si vous avez des pistes de réflexion à me proposer.
Pour l'instant voici le code que j'utilise

Code : Tout sélectionner

for (i in 1:dim(tab_cutoff)[1]){
   for (j in 4:dim(tab_cutoff)[2]){
      if ((i==1) && (j==4)){
         plot(x=i,y=j-3,col=tab_cutoff[i,j],xlim=c(1,dim(tab_cutoff)[1]),ylim=c(1,(dim(tab_cutoff)[2]-3)),xlab='Souche',ylab='Spacer')
      }
      else{
         points(x=i,y=j-3,col=tab_cutoff[i,j])
      }
   }
}



Merci d'avance,
N'hésitez pas si mon explication n'est pas assez claire,

Stéphanie

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 11 Aoû 2010, 10:28

Est-ce que par hasard, une analyse en composantes principales du tableau des valeurs numériques (voir dudi.pca du package ade4) suivie éventuellement d'une classification ascendante hiérarchique sur les coordonnées factorielles des lignes ou des colonnes (fonction hclust) ne correspondrait pas à ce que vous voulez?

Voir aussi la fonction heatmap.
Renaud

Stéphanie Ployart
Messages : 67
Enregistré le : 19 Juin 2009, 08:05

Messagepar Stéphanie Ployart » 11 Aoû 2010, 11:52

Bonjour,

En fait je ne veux pas classer mes valeurs, je voudrais juste les faire s'afficher avec une échelle de couleur.
Comme vous pouvez le constater dans mon code pour l'instant cela est très sommaire et surtout cela ne forme pas des carrés pleins donc ce n'est pas très lisible.

J'ai essayé la fonction heatmap(), le résultat graphique est celui attendu mais il classe les colonnes et les lignes pour pouvoir mettre un dendogramme dessus.
Je suis donc en train d'explorer les options de la fonction pour pouvoir changer l'échelle et enlever ce classement.
Merci pour l'information,

Stéphanie

Samir Messad
Messages : 76
Enregistré le : 10 Jan 2005, 20:56

Messagepar Samir Messad » 11 Aoû 2010, 12:15

Bonjour,

peut être pourrez-vous trouver une fonction qui approche le résultat attendu ici : http://addictedtor.free.fr/graphiques/

Il faudrait au préalable probablement "décontracter" les données dans un tableau à trois entrées : souche, spacer, valeur

Cordialement.

Aurélien Madouasse
Messages : 352
Enregistré le : 26 Fév 2007, 11:23

Messagepar Aurélien Madouasse » 11 Aoû 2010, 12:27

Bonjour,
Peut-être avec la fonction image {graphics}: http://stat.ethz.ch/R-manual/R-patched/library/graphics/html/image.html.

Code : Tout sélectionner

require(grDevices) # for colours
x <- y <- seq(-4*pi, 4*pi, len=27)
r <- sqrt(outer(x^2, y^2, "+"))
image(z = z <- cos(r^2)*exp(-r/6), col=gray((0:32)/32))
image(z, axes = FALSE, main = "Math can be beautiful ...",
      xlab = expression(cos(r^2) * e^{-r/6}))


Aurélien

Stéphanie Ployart
Messages : 67
Enregistré le : 19 Juin 2009, 08:05

Messagepar Stéphanie Ployart » 11 Aoû 2010, 12:59

En fait je viens effectivement d'utiliser la fonction "image" après avoir fouillé l'aide de la fonction heatmap(). Et cela me donne le résultat attendu.
Par contre je voudrais pouvoir rajouter une légende sur mon graphique. Mon problème est qu'en utilisant la fonction legend(), ma légende va forcément être sur mon graphique et donc me cacher une partie des données.
Savez-vous si il existe un moyen de décaler ma légende de ma zone de graphique ?

Merci

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

Messagepar Logez Maxime » 11 Aoû 2010, 13:06

Bonjour,

tu peux aussi la positionner dans la marge :

Code : Tout sélectionner

x <- matrix(rnorm(50),10)
cols <- colorRampPalette(c("red", "white", "blue"))(8)
par(mar=c(2.1,4.1,0.1,4.1))
image(1:5,1:10,t(x[10:1,]), breaks=seq(-2,2,le=9), col=cols, axes=F)
legend(locator(1), legend = 1:8, fill=cols, xpd=NA) # tu cliques sur la figure pour positionner le coin en haut à gauche de ta légende.
axis(1, at=1:5)
axis(2, at=1:10, labels=10:1)
box()


Maxime

Stéphanie Ployart
Messages : 67
Enregistré le : 19 Juin 2009, 08:05

Messagepar Stéphanie Ployart » 11 Aoû 2010, 13:40

Merci beaucoup pour cette astuce que je ne connaissais pas. C'est vraiment très pratique.

Merci à tous pour vos conseils,
J'ai réussi à obtenir le résultat souhaité.
Merci encorde,

Stéphanei


Retourner vers « Questions en cours »

Qui est en ligne

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