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

MATLAB Discussion :

Faire varier la couleur d'un histogramme en fonction d'une autre variable


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Faire varier la couleur d'un histogramme en fonction d'une autre variable
    Bonjour,

    Voila pour vous expliquer un peu. J'affiche dans un premier bar la moyenne de mes SNR en fonction du mois et de la vitesse.

    Ce que je voudrai faire pour mon deuxieme bar, c'est afficher la meme chose que le premier sauf que la couleur ne m'indiquera pas la vitesse mais le nombre de channels utilises pour faire la moyenne. (cf untitled 2)

    J'ai essaye d'utiliser ceci: http://www.developpez.net/forums/d12...y/#post6827924

    Mais je n'arrive a rien...
    Images attachées Images attachées  

  2. #2
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Salut,
    le lien que tu as trouvé semble être le bon pour te donner la solution. Tu peux nous montrer ce que tu as réussi à coder pour qu'on puisse te dire ce qui ne vas pas?

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Voici ce qui me reste de mes essaies... Le probleme c'est que je ne sais pas comment integrer ma variable mchannel qui me donne le nombre de channels utilises.


    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
    figure (2)
    subplot(length(dog),1,d)
     
    box('on');
    grid('on');
    xlabel('month')
    ylabel('snr')
    titre = dog(d,:);
    title(['Dog ',num2str(titre)])
     
    Xuint8 = zeros(1,3,'uint8');
    Xuint8(:,:) = [10 30 55];
    map = colormap(hot(64));
     
    h=bar(mean_m.')
     
    ch = get(h,'Children');
    yd = get(cell2mat(ch),'ydata');

  4. #4
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Salut,
    j'ai un peu modifié le script de Dut avec les entrées que tu utilises. Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    h=bar(mean_m.');
    hh = get(h,'children');
    colormap(hot(64));
    set(hh,'facevertexcdata',mchannel(:));
    J'imagine bien entendu que mchannel contient autant de valeur que mean_m.
    Si tu as moins de 64 channels tu devrais bien avoir une couleur par nombre de channel. Modifie la colormap ("hot" ici) si tu souhaites mieux voir la différence entre les nombres de channel.

  5. #5
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Non mchannel et mean_m non pas la meme taille, c'est pour cela que je voulais savoir si c'etait possible.

    J'ai essaye ton code et j'ai eu cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Error using set
    Conversion to double from cell is not possible.
     
    Error in average (line 121)
    set(mat2cell(hh),'facevertexcdata',mchannel(:));
    Meme en utilisant mat2cell

  6. #6
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    C'est bon j'ai obtenu ce que je voulais. Voici mon code pour ce que ca interesse.
    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
      h=bar(mean_m.');
        hh = get(h,'children');
     
        testo=cell2mat(hh);
        colormap(jet(64));
        for i=1:length(hh)
            if i==1
                set(testo(i),'FaceVertexCData',couleurv1,'FaceColor','flat')
                colorbar('YTickLabel',{'0','5','10','15'})
                caxis([0 15])
            end
            if i==2
                set(testo(i),'FaceVertexCData',couleurv2,'FaceColor','flat')
                colorbar('YTickLabel',{'0','5','10','15'})
                caxis([0 15])
            end
            if i==3
                set(testo(i),'FaceVertexCData',couleurv3,'FaceColor','flat')
                colorbar('YTickLabel',{'0','5','10','15'})
                caxis([0 15])
            end
            if i==4
                set(testo(i),'FaceVertexCData',couleurv4,'FaceColor','flat')
                colorbar('YTickLabel',{'0','5','10','15'})
                caxis([0 15])
            end
        end

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Que renvoi ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    whos couleurv1 couleurv2 couleurv3 couleurv4
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  8. #8
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Name            Size            Bytes  Class     Attributes
    
      couleurv1      12x1                96  double              
      couleurv2      12x1                96  double              
      couleurv3      12x1                96  double              
      couleurv4      12x1                96  double    


    Pourquoi?

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Dans ce cas, mets ces vecteurs dans un tableau de dimension 12x4 et ton code se résumera à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    h = bar(mean_m.');
    hh = get(h,'children');
     
    testo = cell2mat(hh);
    colormap(jet(64));
     
    for i = 1:numel(hh)
        set(testo(i),'FaceVertexCData',couleurv(:,i),'FaceColor','flat')
    end
     
    colorbar('YTickLabel',{'0','5','10','15'})
    caxis([0 15])
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  10. #10
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Je declare mes variables comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    base=[1];
    couleurv1= repmat(base ,12,1);
    couleurv2= repmat(base ,12,1);
    couleurv3= repmat(base ,12,1);
    couleurv4= repmat(base ,12,1);
    Et apres je les utilise comme ceci (c'est un peu bourrin ^^):
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
      mchannel(v,m) = nCh./q; % mean of number of channel
               if isnan(mchannel(v,m))==1
                        mchannel(v,m)=0;
                    end
                    if mchannel(v,m)>=0&&mchannel(v,m)<5
                        if v==1
                            couleurv1(m)=[0];
                        end
                        if v==2
                            couleurv2(m)=[0];
                        end
                        if v==3
                            couleurv3(m)=[0];
                        end
                        if v==4
                            couleurv4(m)=[0];
                        end
     
     
                    end
                    if mchannel(v,m)>=5&&mchannel(v,m)<10
                        if v==1
                            couleurv1(m)=[5];
                        end
                        if v==2
                            couleurv2(m)=[5];
                        end
                        if v==3
                            couleurv3(m)=[5];
                        end
                        if v==4
                            couleurv4(m)=[5];
                        end
     
                    end
                     if mchannel(v,m)>=10&&mchannel(v,m)<15
                         if v==1
                            couleurv1(m)=[10];
                        end
                        if v==2
                            couleurv2(m)=[10];
                        end
                        if v==3
                            couleurv3(m)=[10];
                        end
                        if v==4
                            couleurv4(m)=[10];
                        end
                     end
                     if mchannel(v,m)>=15
                         if v==1
                            couleurv1(m)=[15];
                        end
                        if v==2
                            couleurv2(m)=[15];
                        end
                        if v==3
                            couleurv3(m)=[15];
                        end
                        if v==4
                            couleurv4(m)=[15];
                        end
                    end

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Citation Envoyé par keke0 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    base=[1];
    couleurv1= repmat(base ,12,1);
    couleurv2= repmat(base ,12,1);
    couleurv3= repmat(base ,12,1);
    couleurv4= repmat(base ,12,1);
    devient simplement :

    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Le reste de ton code se résume ensuite à ceci :

    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
    mchannel(v,m) = nCh./q; % mean of number of channel
    if isnan(mchannel(v,m))==1
        mchannel(v,m) = 0;
    end
    if mchannel(v,m)>=0 && mchannel(v,m)<5
        couleurv(m,v) = 0;    
    end
    if mchannel(v,m)>=5 && mchannel(v,m)<10
        couleurv(m,v)= 5;
    end
    if mchannel(v,m)>=10 && mchannel(v,m)<15    
        couleurv(m,v) = 10;
    end
    if mchannel(v,m)>=15
        couleurv(m,v) = 15;    
    end
    Note qu'en initialisant couleurv avec zeros à la place de ones la condition suivante devient inutile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if mchannel(v,m)>=0 && mchannel(v,m)<5
        couleurv(m,v) = 0;    
    end
    A tester bien entendu...
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  13. #13
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Waou I am impressed!!!

    Merci beaucoup

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

Discussions similaires

  1. [plot] Faire varier la couleur d'une courbe
    Par christophe_halgand dans le forum MATLAB
    Réponses: 4
    Dernier message: 25/01/2008, 18h11
  2. [bar] Faire varier la couleur dans un histogramme
    Par totooo dans le forum MATLAB
    Réponses: 7
    Dernier message: 23/12/2007, 13h14
  3. Réponses: 4
    Dernier message: 07/02/2007, 23h33
  4. Réponses: 1
    Dernier message: 21/07/2006, 12h11
  5. [VBA-E]Faire varier la couleur d'une cellule
    Par benoue dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 24/03/2006, 16h38

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