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 :

Colorier partie d'une densité de distribution


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Par défaut Colorier partie d'une densité de distribution
    Bonjour, j'essaie d'automatiser le process suivant: pour 3 densités de distribution distinctes (plus ou moins)... je place 2 cutoffs à partir desquels je cherche à colorier une partie des 3 densités de distribution.

    Ex: - Pour la première (la "densité" associée à mes valeurs les plus faibles), je veux colorier de -infi à cutoff1.
    - Pour la seconde (la "densité associée à mes valeurs intermédiaires), je veux colorier de cutoff1 à cutoff2.
    - Enfin, pour la troisième (la "densité" associée à mes valeurs fortes), je veux colorier de cutoff2 à +infi.

    Donc j'ai fait le petit programme suivant (non optimisé mais il s'agit d'un brouillon):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    # au début j'ai une variable explicative et une variable réponse, je construit les différentes "sous-variables" à partir de la variable d'origine et de ma réponse (codée 1, 2, 3).
    # Gross-modo ce que je fais sur les lignes qui suivent c'est récupérer les valeurs max et min de ma variable ainsi que des 3 densités de distribution car je vais me servir d'un plot de départ pour compléter mon graphe, du coup lors du xlim je vais avoir besoin des valeurs minimales et maximales de l'ensemble de mes densités, quand aux valeurs max et min de ma variable c'est pour voir où elle s'arrête réellement puisque mes densité vont de - à + l'infinie contrairement à ma variable.
        MIN = min(Var[,2])
        MAX = max(Var[,2])
        mQ1 = Var[which(Var[,1] == 1),2]
        mQ2 = Var[which(Var[,1] == 2),2]
        mQ3 = Var[which(Var[,1] == 3),2]
        xMINdens1 = min(density(mQ1)$x)
        xMAXdens1 = max(density(mQ1)$x)
        yMAXdens1 = max(density(mQ1)$y)
        xMINdens2 = min(density(mQ2)$x)
        xMAXdens2 = max(density(mQ2)$x)
        yMAXdens2 = max(density(mQ2)$y)
        xMINdens3 = min(density(mQ3)$x)
        xMAXdens3 = max(density(mQ3)$x)
        yMAXdens3 = max(density(mQ3)$y)
        xMINdens = min(c(xMINdens1,xMINdens2,xMINdens3))
        xMAXdens = max(c(xMAXdens1,xMAXdens2,xMAXdens3))
        yMAXdens = max(c(yMAXdens1,yMAXdens2,yMAXdens3))
     
    # Je plot en premier la densité associée aux valeurs de ma variable pour la classe 1 puis ensuite celles pour la classe 2 et puis celles pour la classe 3.
        plot(density(mQ1),xlim = c(xMINdens,xMAXdens), ylim = c(0,yMAXdens),col = "green",lwd=3)
        points(density(mQ2),type='l',col = "blue",lwd=3)
        points(density(mQ3),type='l',col = "red",lwd=3)
        lines(rbind(Var[cutoff1,2],Var[cutoff1,2]),rbind(0,yMAXdens),lty=2)
        lines(rbind(Var[cutoff2,2],Var[Cutoff2,2]),rbind(0,yMAXdens),lty=2)
     
    # Enfin, je trace mes limites dû à ma variable ainsi que mes 2 cutoffs.
        lines(rbind(MIN,MIN),rbind(0,yMAXdens),lty=1)
        lines(rbind(MAX,MAX),rbind(0,yMAXdens),lty=1)
        legend("topright",c("Class1","Class2","Class3","Cutoff","Valeurs limites"),col=c("green","blue","red","black","black"),lty=c(1,1,1,2,1))
    Un exemple concret (bon là c'était pour 4 classes, mais j'ai volontairement réduit à 3 pour faciliter la lecture, de même pour le trait en arrête qui devient continue, c'était pour pouvoir colorier sous paint rapidement):



    Alors j'ai vu qu'on pouvait faire ça avec la fonction polygone, mais pas moyen de lui mettre les cutoffs pour limiter le coloriage...


    En vous remerciant d'avance pour votre intérêt à mon problème et votre aide!

  2. #2
    Membre émérite

    Homme Profil pro
    Cyber Security & AI
    Inscrit en
    Février 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Cyber Security & AI

    Informations forums :
    Inscription : Février 2009
    Messages : 506
    Billets dans le blog
    2
    Par défaut
    Pour l'image voila le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    plot(5:9)
    polygon(c(3,3,4,4),c(5,7,8,5), xpd=xpd, col = "orange", xpd=xpd, lwd = 5, lty =2)
    Pour ton cas je ferais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    plot(fct(xinf, xsup)
    polygon(c(xliminf, xliminf, ...le pas p ..., xlimsup, xlimsup), c(0,fct(xliminf), ...fct(p)..., fct(xlimsup)), xpd =xpd, col = orange)
    Images attachées Images attachées  

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Par défaut
    Salut et merci pour ton aide, malheureusement ça ne marche pas chez moi, le message d'erreur que j'ai ne m'aide pas en prime.

    Du coup on va essayer de simplifier ma problématique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    test = runif(1000)
    density_test = density(test)
    plot(density_test)
    polygon(seq(0.4,0.6,0.01),seq(min(density(test)$y),max(density(test)$y),0.01),col="green")
    Donc je cherche à colorier entre 0.4 et 0.6 sachant que ma densité va de -0.2 à 1.2 (sur mon test à moi).


    Or le message d'erreur que R me renvoit est:

    Erreur dans xy.coords(x, y) : 'x' and 'y' lengths differ
    Possible de me montrer directement dans ma syntaxe l'erreur?


    Merci d'avance.

  4. #4
    Membre émérite

    Homme Profil pro
    Cyber Security & AI
    Inscrit en
    Février 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Cyber Security & AI

    Informations forums :
    Inscription : Février 2009
    Messages : 506
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    test = runif(1000)
    density_test = density(test)
    plot(density_test)
    polygon(c(density_test$x[220],density_test$x[220:294],density_test$x[294]),c(0,density_test$y[220:294],0),col="green")
    Avec density_test$x[220] et density_test$x[294] environs egal à 0.4 et 0.6.

    Erreur dans xy.coords(x, y) : 'x' and 'y' lengths differ
    Veux dire que tu n'as pas le même nombre d'élément entre x et y

    Cela t'aide t 'il ?
    Cordialement.
    Images attachées Images attachées  

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Par défaut
    Oh oui! C'est génial! Ce bout de code est divin!

    Merci dev_ggy

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/01/2015, 09h03
  2. [VB6] Colorier une partie d'une PICTUREBOX
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 16/05/2006, 12h06
  3. [Tableaux] Colorier une partie d'une case de tableau
    Par franfr57 dans le forum Langage
    Réponses: 12
    Dernier message: 22/04/2006, 12h03
  4. Extraction d'une partie d'une colonne
    Par choubiroute dans le forum Oracle
    Réponses: 8
    Dernier message: 01/06/2005, 14h29
  5. [glut]afficher une partie d'une image
    Par khayyam90 dans le forum OpenGL
    Réponses: 3
    Dernier message: 17/07/2004, 15h35

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