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

  1. #1
    Membre du Club
    [bar3] variation de la couleur en fonction de la hauteur des barres
    Bonjour,

    Alors voila, je trace des histogrammes, et je trouve que le résultat n'est pas tres visible.

    Par exemple je trace un histogramme 3D de cette manière :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    h = bar3(matrice_reduite);
     
    for n=1:numel(h)
        cdata=get(h(n),'zdata');
        set(h(n),'cdata',cdata,'facecolor','interp');
    end
        set(gca,'XTickLabel',axeX_reduit);
        set(gca,'XTick',[1:length(axeX_reduit)]); 
        set(gca,'YTickLabel',axeY_reduit); 
        set(gca,'YTick',[1:length(axeY_reduit)]);
        set(gca,'Title',text('String','Tittle'));


    et je trouve que la couleur ne varie pas assez. est-ce qu'il existe autre chose que 'interp' pour faire varier la couleur en fonction de la hauteur?

  2. #2
    Membre éclairé
    Bonjour,

    Tu peux regarder du côté de colormap pour faire varier la plage de couleur suivant ta convenance.

  3. #3
    Rédacteur/Modérateur

    Il faudrait aussi en savoir plus sur la plage des valeurs que tu traces.

    Pourrais-tu nous montrer un aperçu du graphique que tu obtiens ?
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et 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)

  4. #4
    Membre du Club
    Merci mais j'ai regardé tous les paramètres de colormap et il y en a aucun qui fait mieux resortir les différences. En faite j'ai une valeur à 10% un peu pres quand les autres varient de 0 à 2%. Du coup on voit bien la différence entre le point à 10% et les autres, mais pour faire la différences avec les autres ç'est pas folichon... Enfin..

    Des idées pour m'aider svp?

    Merci par avance

  5. #5
    Membre du Club
    Pardon dut je n'avais pas vu ta réponse... mais je crois que j'ai ai répondu un peu^^

    Voila le graph que j'obtiens quand même :

  6. #6
    Rédacteur/Modérateur

    Tu peux par exemple introduire une répartition logarithmique de l'échelle des couleurs :

    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
    M = rand(5,5)*3;
    M(2,2) = 10;
     
    figure(1)
    clf
     
    h = bar3(M);
     
    for n=1:numel(h)
     
         cdata = get(h(n),'zdata');
         cdata = log(cdata);
         cdata(isinf(cdata)) = 0;
         set(h(n),'cdata',cdata,'facecolor','interp'); 
     
    end
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et 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)

  7. #7
    Rédacteur/Modérateur

    Et l'autre solution avec une couleur unique par barre :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    M = rand(5,5)*3;
    M(2,2) = 10;
     
    h = bar3(M);
     
    for n=1:numel(h)
     
         cdata = get(h(n),'zdata');
         cdata=repmat(max(cdata,[],2),1,4);
         cdata = log(cdata);
         cdata(isinf(cdata)) = 0;
         set(h(n),'cdata',cdata); 
     
    end


    Ces deux solutions sont des évolutions de celles disponibles ici
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et 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
    Membre du Club
    Oui effectivement je l'avais lu, c'était comme ça que j'avais pu faire varier la couleur en fonction de la hauteur mais je ne savais pas du tout qu'on pouvait introduire une répartition logarithmique des couleurs. En tout cas cela me concient très bien et j'ai mieux compris comment focntionne la répartition des couleurs des graph avec Matlab

    Merci beaucoup!

  9. #9
    Membre du Club
    J'avais cliqué sur résolu un peu trop tôt malheureusement

    Je me permet de réouvrir la discussion car il me reste une question sur le sujet...
    En faite la répartition logarithmique c'est très bien, on voit tout à fait la différence entre les différentes valeurs (cf. pj).

    Mais du coup, les valeurs nulles sont orange comme la couleurs des valeurs moyennes (ça ne change rien avec les autres colormap) et j'aimerais qu'elles soient blanches.

    J'ai essayé d'imposer une condition sur les valeurs de ma matrice mais ça ne doit pas être ça puisque ça ne rentre jamais dans ma boucle (ça me renvoie le graph avec les couleurs d'origines).

    Déjà ma question c'est : est ce que c'est possible? lol

    si cela est possible une petite piste serait la bienvenue.

    Merci par avance!

  10. #10
    Rédacteur/Modérateur

    J'avais écris mon exemple un peu vite... il faut se méfier du domaine de définition du logarithme par rapport aux données tracées :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    M = rand(5,5)*3;
    M(2,2) = 10;
    M(end) = 0;
    
    h = bar3(M);
    
    for n=1:numel(h)
    
         cdata = get(h(n),'zdata');
         cdata=repmat(max(cdata,[],2),1,4);
         cdata = log(cdata+1);
         set(h(n),'cdata',cdata); 
    
    end
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et 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)

  11. #11
    Membre du Club
    C'est parfait! C'est vrai que je ne n'avais pas pensé à son domaine de définition!
    Problème définitivement résolu! Merci