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 :

gradient de couleur pour un tableau de données


Sujet :

MATLAB

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Points : 99
    Points
    99
    Par défaut gradient de couleur pour un tableau de données
    Bonjour,
    Je voudrais réaliser un gradient de couleur pour un tableau de données.
    Mon tableau possède X valeurs allant de -3 à +3 et je voudrais lors du plot associés chaque point à une couleur de mon gradient.
    Je voudrais un gradient de vert pour les données positives et un gradient de rouge pour les valeurs négatives. Du plus clair au plus foncé forcément .
    Merci pour votre aide.

  2. #2
    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
    Quelle fonction utilise-tu pour tracer le graphique ?

    Montre nous ton code.
    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)

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Points : 99
    Points
    99
    Par défaut
    Actuellement je fais un simple plot la couleur me sert à différencier mes courbes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     PlotHandle{pt} = plot (Handle,X,Y,'LineWidth',1,'color',rgb(RGBArray(i)),'MarkerSize',1,'marker','.');
    Mais je voudrais essayer d'utiliser les marker pour différencier les courbes et utiliser les couleurs pour les niveaux dans mes courbes.
    Par contre je pensais faire une boucle pour afficher chaque point avec une couleur de mon tableau gradient mais vu le nombre de points (~800000) ça risque d'être long.
    Merci

  4. #4
    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
    Normalement, je te conseillerais d'utiliser la fonction scatter associée à une palette de couleurs "maison" (comme par exemple dans cette discussion : Faire varier colormap en fonction des valeurs positives ou négatives)

    Par contre, es-tu sur de vouloir afficher 800000 points ?
    Imagine la taille de chaque point sur un écran standard
    Je pense que tu devrais réduire le nombre de données à afficher
    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)

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Points : 99
    Points
    99
    Par défaut
    Super ce post merci ça à l'air pas mal par contre, comment associé le colormap à la valeur du point déterminé par la position XY.
    Concernant le nombre points je vais voir si j'arrive à faire une sorte de fonction zoom qui suit le tracè de la courbe grâce à un curseur de déplacement.
    Merci

  6. #6
    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,
    pour gérer le tracer d'un grand nombre de point, tu peux jetter à oeil à cette contribution :
    http://www.mathworks.fr/matlabcentra...40790-plot-big

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Points : 99
    Points
    99
    Par défaut
    Merci Dut, ton post sur le gradient est parfait par contre je n'arrive pas à associer mon tracé à ma colormap.
    En gros j'ai un tableau à 3 variables (X,Y,V) et V correspondant à mon capteur.
    Comment je peux faire un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    plot(Handle,X,Y,'color',ColorMap(V));
    Merci

  8. #8
    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
    As-tu essayé avec la fonction scatter (en réduisant préalablement le nombre de points à tracer) ?
    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)

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Points : 99
    Points
    99
    Par défaut
    Ma courbe à tracer à une forme de patate en 2 D (X,Y) et il faudrait que je mette ma valeur sur l'axe Z avec le colormap.
    Avec scatter je n'ai pas trouvé comment faire des lignes .
    En gros je mesure des déformations verticales sur une forme plus ou moins circulaire vu de dessus.

  10. #10
    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, tu peux t'inspirer de la FAQ : Comment tracer une ligne dont la couleur varie ?
    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)

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Points : 99
    Points
    99
    Par défaut
    Super Merci
    Voici comment tracer une courbe 2D avec une 3eme valeur pour la couleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    hh=patch(X,Y,0);
    set(hh,'cdata',Z,'LineWidth',2);
    set(hh,'facecolor','none','edgecolor','flat');
    par contre pour l'instant je n'arrive pas à associer mon gradient à Z.
    Je pensais utiliser
    pour déterminer les valeurs mini et maxi ainsi que la fonction colorGradient qui met permet de créer une sort de colormap
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [grad,im]=colorGradient(rgb('DarkRed'),rgb('DarkGreen'),10);
    par contre après il faut que je fasse une boucle qui pour chaque valeur de Z pour chercher le gradient associé

  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
    Un exemple :

    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
    th = linspace(0,2*pi,100);
     
    x = 10*cos(th);
    y = 10*sin(th);
    z = rand(1,100)*6-3;
     
    R = linspace(0,1,64);
    G = linspace(1,0,64);
    B = zeros(1,64);
    cmap = [R(:) G(:) B(:)];
     
    figure
    colormap(cmap)
     
    patch('XData', [nan;x(:);nan],...
          'YData', [nan;y(:);nan],...
          'ZData', [nan;z(:);nan],...
          'CData', [nan;z(:);nan],...
          'FaceColor', 'interp', ...
          'EdgeColor', 'interp')
     
    view(3)
    axis equal
     
    caxis([-3 3])
     
    colorbar
    Images attachées Images attachées  
    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
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 296
    Points : 99
    Points
    99
    Par défaut
    Super ça marche parfait voici mon bout de code pour l'afficher vue de dessus en 2D
    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
     
    f=load('Acquisition.txt');
     
      X= f(:,2);
      Y= f(:,3);
      Z= f(:,8);
     
      y = X';
      x = Y';
      z = Z';
     
    G = linspace(0,1,64);
    R = linspace(1,0,64);
    B = zeros(1,64);
    cmap = [R(:) G(:) B(:)];
     
    figure;
    colormap(cmap);
     
    patch('XData', [nan;x(:);nan],...
          'YData', [nan;y(:);nan],...
          'CData', [nan;z(:);nan],...
          'FaceColor', 'interp', ...
          'EdgeColor', 'interp',...
          'LineWidth',5 ,...
          'marker','.');
     
    axis tight equal;
    caxis([min(z) max(z)]);
    colorbar;
    Par contre comment je peux faire pour limiter le nombre de couleur à 5 par exemple , car avec le gradient j'ai du mal à voir le passage du positif au négatif.
    Merci

  14. #14
    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 sdecorme Voir le message
    comment je peux faire pour limiter le nombre de couleur à 5 par exemple
    Tu remplaces :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    R = linspace(1,0,64);
    G = linspace(0,1,64);
    B = zeros(1,64);
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ncolors = 5;
     
    R = linspace(1,0,ncolors);
    G = linspace(0,1,ncolors);
    B = zeros(1,ncolors);
    Au passage, tu n'as pas besoin de variable intermédiaire, tu peux directement faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    patch('XData', [nan;X(:);nan],...
          'YData', [nan;Y(:);nan],...
          'CData', [nan;Z(:);nan],...
          'FaceColor', 'interp', ...
          'EdgeColor', 'interp',...
          'LineWidth',5 ,...
          'marker','.');
    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)

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

Discussions similaires

  1. [XL-2007] Fonction pour récap. tableau de données
    Par problemeaide dans le forum Excel
    Réponses: 5
    Dernier message: 20/09/2012, 13h36
  2. Réponses: 1
    Dernier message: 17/05/2007, 12h29
  3. composant Grid pour afficher un tableau de données
    Par hammag dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 23/03/2007, 14h24
  4. tableau qui a deux couleur pour les lignes <td>
    Par abdess6600 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 23/05/2006, 16h50
  5. [HTML] Tableau pour l'enregistrement des données
    Par ghyosmik dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 01/11/2005, 15h28

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