IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

gplot et échelle de couleur pour edges


Sujet :

R

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut gplot et échelle de couleur pour edges
    Bonjour,
    Je souhaiterais sur la représentation de mon réseau avec gplot pouvoir visualiser le poids attribué à chaque lien (matrice d'adjacence valuée) à l'aide d'une coloration différente en fonction du poids du lien (échelle de gris par exemple) avec par exemple la couleur noir pour le lien de plus faible poids et la blanche pour celui de plus fort poids.
    Je suis débutant et je ne vois ce qu'il faudrait saisir pour obtenir ce résultat dans l'argument edge.col de la fonction gplot.
    Je vous remercie par avance

  2. #2
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Afin d'optimiser vos chances d'obtenir de l'aide, dès que possible, merci de :

    • préciser le package auquel appartiennent les fonctions utilisées (gplot?)
    • mettre un exemple court mais représentatif de votre jeu de données ainsi que le code concerné par votre problème


    Pour votre cas précis, peut-être voir du côté des fonctions du type : "heat.colors", "topo.colors", ... qui permettent de créer des dégradés.

    Bonne continuation


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Effectivement et je vous remercie je vais essayer d'apporter des précisions.
    J'utilise le package statnet dont fait partie la fonction gplot (package sna).
    Dans l'aide sur la fonction l'argument edge.col doit permettre de colorer les liens en fonction de leur poids :"use a vector if edges are to have different colors".
    Mes données sont sous forme d'une matrice d'adjacence valuée de dimension 145x145 dont voici un extrait (les noeuds A,B.. représente des lieux et les liens 0 à 27 le nombre d'individu se rendant du lieu situé en ligne vers le lieu situé en colonne, ex : 2 indiv de A vers B, 1 indiv de B vers A)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        A  B  C  D
    A  0  2  0  0
    B  1  0  5  27
    C  0  2  0  4
    D  0  1  0  0
    je souhaite pour la visualisation du réseau avec gplot que les liens soit colorés en fonction de leur poids : 1, 2....27.

    voici mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > setwd("D:/data")
    > net.lieu <- read.csv2 (file = "lieu.csv" , header = TRUE)
    > mat.lieu <- as.matrix(net.lieu)
    > dim (mat.lieu)
    [1] 145 145
    > net.lieu <- as.network(as.matrix(net.lieu))
    > mypalette<-brewer.pal(9,"YlOrRd")
    > gplot(net.lieu, edge.lwd = 0.5, edge.col = mypalette, vertex.col = "Yellow", vertex.sides = 3, vertex.cex = 1)
     
    #en fait je pense qu'il faut d'abord créer une palette avec un nobre de couleur = 27
    #je transforme ma matrice mat.lieu en vecteur avec as.vector
    • Comment faire pour supprimer les 0 dans le vecteur ??
    • Est-ce qu'en mettant le vecteur créé dans l'argument edge.col cela risque de marcher ?


    D'avance merci.

  4. #4
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Tout d'abord, merci pour ces précisions qui aident un peu mieux à comprendre votre problème (je ne m'attendais pas du tout à ce que la fonction "gplot" renvoie ce genre de graphique ).
    Petite remarque cependant, pour inclure du code dans vos messages, il est préférable d'utiliser les "balises codes" (bouton "dièse" # dans la barre de personnalisation) afin de le rendre plus lisible pour tout le monde.

    Bref, sinon :

    Citation Envoyé par Croq30
    #en fait je pense qu'il faut d'abord créer une palette avec un nobre de couleur = 27
    C'est ce que j'avais pensé aussi, d'où ma suggestion d'avoir recours aux fonctions du type "heat.colors", "topo.colors", ou encore "colorRampPalette" pour un joli dégradé.

    Citation Envoyé par Croq30
    #je transforme ma matrice mat.lieu en vecteur avec as.vector

    - comment faire pour supprimer les 0 dans le vecteur ??
    SI j'ai bien compris, vous souhaitez simplement supprimer tous les éléments nuls de votre vecteur, c'est bien cela? Si oui, alors vous pouvez avoir recours à la fonction "which" (très pratique si vous ne connaissez pas ), comme suit par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    v<-as.vector(mymatrice)
    zero<-which(v==0)
    v2<-v[-zero]
    Sinon,

    Citation Envoyé par Croq30
    - est-ce qu'en mettant le vecteur créé dans l'argument edge.col cela risque de marcher ?
    Là je ne suis pas sûre d'avoir bien compris... Quel vecteur voulez-vous mettre dans "edge.col"? Je pense que le vecteur à mettre dans l'argument "edge.col" doit contenir autant d'éléments que vous représentez de "liens".

    Voilà, j'espère que ceci vous permettra d'avancer un peu.
    Bonne continuation


    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour et MERCI beaucoup, c'est exactement cela.
    Par tatonnement j'avais tapé ce code, mais le votre est plus clair pour supprimer les 0:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    > setwd("D:/data")
    > net.lieu <- read.csv2 (file = "lieu.csv" , header = TRUE)
    > mat.lieu <- as.matrix(net.lieu)
    > a <- as.vector (mat.lieu)
    > b <- which (a > "0")
    > a[b]
    > c <- a[b]
    > max(c)
    [1] 117
    > palette(c(heat.colors(117)))
    > net.lieu <- as.network(as.matrix(net.lieu))
    > gplot(net.lieu, edge.lwd = 0.5, edge.col = c, vertex.col = "Black", vertex.sides = 2, vertex.cex = 1)
    Afin de réduire le nombre de couleurs et en garder 10, j'aurais souhaité remplacer dans mon vecteur qui contient mes liens (en fait 1354) toutes les valeurs comprise entre 1 et 5, par 1, celle entre 6 et 10 par 2...
    Est-ce possible en utilisant "which" dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    1 <- which(c=<5)
    2 <- which(c>5 § c=<10)
    Je vous remercie.
    Bien cordialement.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut oups
    Oups désolé, j'ai posté trop vite, je devrais m'en sortir avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    > c[c<=5]<-1
    > c
    Merci pour votre patience et votre gentillesse.

  7. #7
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Re-bonjour,

    Oui c'est possible avec which en faisant quelque chose comme ça (après il y a peut-être une manière plus "propre" de procéder...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    c[which(c<=5)]<-1
    c[which( (c>5) & (c<=10) )]<-2
     
    #etc...
    Il faut que vous essayiez aussi en tatonnant par vous-même plutôt que d'attendre que la réponse vous arrive toute prête. (edit: nos messages se sont croisés )
    De plus, pour accéder à l'aide de la fonction :
    Cordialement,

    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. plus de couleur pour les contrôles shape
    Par matech dans le forum Composants VCL
    Réponses: 3
    Dernier message: 03/01/2006, 13h29
  2. Réponses: 6
    Dernier message: 06/12/2005, 15h52
  3. [TP] Besoin de couleurs pour raytracing
    Par Rniamo dans le forum Turbo Pascal
    Réponses: 6
    Dernier message: 07/04/2005, 18h06
  4. Couleur pour element d'une Checklistbox
    Par Chonchon dans le forum Composants VCL
    Réponses: 4
    Dernier message: 27/10/2004, 16h50
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo