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 :

Tracer ligne dont la couleur varie mais avec colormap perso


Sujet :

MATLAB

  1. #1
    Invité
    Invité(e)
    Par défaut Tracer ligne dont la couleur varie mais avec colormap perso
    Bonjour,

    J'ai bien vu la FAQ, mais dans mon cas, j'ai un colormap perso "mycmap" que j'aimerais appliquer à un plot et en changeant le CLIM. Ca marche très bien en 3D avec des surfaces:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    surf(x,y,z)
    load('MyColormaps','mycmap')
    set(gcf,'Colormap',mycmap);
    set(gca,'CLim',[2.5 4]);
    shading interp;
    En 2D par contre j'arrive pas à bien l'appliquer, mon colormap contient 128 couleur alors que mon x et y 60 lignes et j'obtiens cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: Color Data is not set for Interpolated shading
    Alors quand je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    patch('xdata',x,'ydata',y,'facecolor','interp','edgecolor','interp','facevertexcdata',mycmap(1:60,:))
    ça marche mais c'est pas ce que je veux.

    PS: Mon Colormap/CLIM permet de mettre du rouge au dessus de 4, du bleu en dessous de 2,5 et un dégradé au milieu

  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 : 52 882
    Points
    52 882
    Par défaut
    Tout dépend des dimensions de x,y et z ...

    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    figure
    colormap(mycmap);
    patch('xdata',x,'ydata',y,'facecolor','interp','edgecolor','interp','cdata',z)
    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
    Invité
    Invité(e)
    Par défaut
    le problème c'est que je ne connais pas les dimensions de x et y. Là elles sont de 60 mais l'utilisateur peut très bien entrer 500 donc je peux pas faire un colormap dedié.

    sinon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    figure
    colormap(mycmap);
    patch('xdata',x,'ydata',y,'facecolor','interp','edgecolor','interp','cdata',[2.5 4])
    Warning: Color Data is not set for Interpolated shading
    toujours le même problème

  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 : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par bizounours94 Voir le message
    toujours le même problème
    Sauf que dans mon code, j'avais mis la variable z pour CData...
    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
    Invité
    Invité(e)
    Par défaut
    oué mais c'est quoi ta variable z alors ? j'en ai pas moi

  6. #6
    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 : 52 882
    Points
    52 882
    Par défaut
    Ben... en 2D, pour chaque point de ta courbe, il te faut bien 3 informations :
    • la coordonnée x
    • la coordonnée y
    • une valeur pour la couleur


    Comment est déterminée cette troisième donnée ?
    C'est peut être tout simplement y (la couleur varie en fonction de l'ordonnée), non ?
    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)

  7. #7
    Invité
    Invité(e)
    Par défaut
    bah justement c'est matlab qui devrait le faire tout seul, il faudrait qu'il mette mycmap (vecteur de couleur 128*3) en l'ajustant avec le CLIM que je veux.

  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 : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par bizounours94 Voir le message
    bah justement c'est matlab qui devrait le faire tout seul
    ... dans ton premier appel à la fonction SURF, tu as donné sans le savoir un quatrième argument C à la fonction :
    Citation Envoyé par documentation de la fonction SURF

    SURF(X,Y,Z,C) plots the colored parametric surface defined by four matrix arguments.

    SURF(X,Y,Z) uses C = Z, so color is proportional to surface height.
    Dans ton cas, tu as fais (sans le savoir) :

    Il n'est pas possible de faire la même chose pour une courbe (2 arguments à la place de 3)

    Il faut donc bien spécifier une valeur pour la couleur comme mentionné dans la , soit à la propriété FaceVertexCdata, soit à la propriété CData
    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
    Invité
    Invité(e)
    Par défaut
    conclusion: c'est impossible ?

  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 : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par bizounours94 Voir le message
    rouge au dessus de 4, du bleu en dessous de 2,5 et un dégradé au milieu
    La tu parles bien des valeurs en y, non ?

    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    figure
    colormap(mycmap);
    patch('xdata',x,'ydata',y,'facecolor','interp','edgecolor','interp','cdata',y)
    Sinon mets tes deux variables x et y dans un fichier mat et attache le à un message (en l'incluant d'abord dans une archive zip ou rar)
    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
    Invité
    Invité(e)
    Par défaut
    ah oué comme ça, ça marche. merci
    je peux même rajouter ma ligne après pour changer les bornes

    PS: comment on fait pour changer l'épaisseur du trait, je sais le faire en scilab mais j'ai pas trouvé la correspondance matlab.

  12. #12
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Citation Envoyé par bizounours94 Voir le message
    PS: comment on fait pour changer l'épaisseur du trait, je sais le faire en scilab mais j'ai pas trouvé la correspondance matlab.
    Il faut modifier la propriété LineWidth de ton objet.
    Règles du Forum

    Adepte de la maïeutique

  13. #13
    Invité
    Invité(e)
    Par défaut
    En fait j'ai un bug maintenant ...

    J'ai 2 courbes a afficher comme ça et ça me donne un résultat bizarre pour l'une des 2 (cf photo).

    J'ai mis les fichier .mat (renomé en txt) pour que vous puissiez tester. Avec X2 et Y2 ça marche, avec X1 et Y1 ça fait la surface bizarre.

    EDIT: j'arrive pas à faire marcher LineWidth avec le patch, au mieu si je mets un plot, j'ai une grosse ligne bleu et par dessus un trait fin avec le dégradé de couleur.
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 16/07/2009 à 15h19.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Pour ceux qui veulent le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    load('MyColormaps','mycmap')
                              colormap(mycmap);
                              patch('xdata',X1,'ydata',Y1,'facecolor','interp','edgecolor','interp','cdata',Y1)
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    load('MyColormaps','mycmap')
                              colormap(mycmap);
                              patch('xdata',X2,'ydata',Y2,'facecolor','interp','edgecolor','interp','cdata',Y2)

  15. #15
    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 : 52 882
    Points
    52 882
    Par défaut
    Tiens je ne me rappelais plus de cette technique... il suffit d'insérer des NaN aux deux extrémités des coordonnées du tracé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    figure
    colormap(mycmap);
    hold on
    patch('xdata',[nan;X1(:);nan],'ydata',[nan;Y1(:);nan],'facecolor','interp','edgecolor','interp','cdata',[nan;Y1(:);nan])
    patch('xdata',[nan;X2(:);nan],'ydata',[nan;Y2(:);nan],'facecolor','interp','edgecolor','interp','cdata',[nan;Y2(:);nan])
     
    set(gca,'clim',[2.5 4])
    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)

  16. #16
    Invité
    Invité(e)
    Par défaut
    J'aurais pu cherché un moment alors ... c'est un bug ou quoi ?

  17. #17
    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 : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par bizounours94 Voir le message
    c'est un bug ou quoi ?
    Non... on s'en sert aussi pour afficher des patch qui n'ont pas le même nombre de sommet avec un seul appel à la fonction PATCH

    Au passage, la vient d'être mise à jour : 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)

Discussions similaires

  1. [AC-2003] ligne dont un champ varie
    Par ouinih dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 12/03/2012, 19h27
  2. Réponses: 2
    Dernier message: 23/10/2009, 11h55
  3. Réponses: 8
    Dernier message: 02/07/2009, 10h46
  4. Réponses: 23
    Dernier message: 01/08/2008, 13h35
  5. Réponses: 3
    Dernier message: 31/08/2005, 14h09

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