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 :

[plot] Get couleur d'un point


Sujet :

MATLAB

  1. #1
    Invité
    Invité(e)
    Par défaut [plot] Get couleur d'un point
    Bonjour,

    J'ai tracé un graph sous Matlab, et je voudrais à présent sauvegarder les coordonnées et la couleur de chaque point.

    Pour les coordonnées, je fais simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xx = get(findobj('type','line'),'xdata');
    yy = get(findobj('type','line'),'ydata');
    mais pour la couleur, je ne trouve pas comment faire.

    Le but final est de faire cette manipulation sur plusieures figures, pour ensuite tracer tous les points sur la même figure. Il est important que chaque point garde sa couleur initiale.
    Une idée ?

    Merci de 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 : 52 884
    Points
    52 884
    Par défaut
    Il faut récupérer les propriétés MarkerEdgeColor et MarkerFaceColor des objets Line
    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
    Ok ok, c'était donc ça. Merci :)

    Par contre, j'ai des difficultés à retracer le plot à partir de ces infos ...
    J'écris les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    xx = get(findobj('type','line'),'xdata');
    yy = get(findobj('type','line'),'ydata');
    edgecolor = get(findobj('type','line'),'MarkerEdgeColor');
    facecolor = get(findobj('type','line'),'MarkerFaceColor');
    deux fois.
    A la fin de la première fois, je nomme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    xmat1 = xx;
    ymat1 = yy;
    edgecolor1 = edgecolor;
    facecolor1 = facecolor;
    A la fin de la deuxième, je nomme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    xmat2 = xx;
    ymat2 = yy;
    edgecolor2 = edgecolor;
    facecolor2 = facecolor;
    Puis je plot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot([xmat1 xmat2],[ymat1 ymat2],'o','MarkerEdgeColor',[edgecolor1;edgecolor2],'MarkerFaceColor',[facecolor1;facecolor2])
    Ca ne marche pas : xmat1 &co ne sont pas des matrices mais des tableaux ... Du coup je les transforme en tableaux comme il suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sx = size(xx);
    k = 1;
    for i = 1:sx(1)
        ssx = size(xx{i});
        for j = 1:ssx(2)
            xmat(k) = xx{i}(j);
            ymat(k) = yy{i}(j);
            k = k+1;
        end
    end
    Mais je ne vois pas comment faire avec les tableaux de couleurs ... Ils sont de la même taille que xx et yy, et du type
    edgecolor =

    [1x3 double]
    'auto'
    [1x3 double]
    'auto'
    [1x3 double]
    'auto'
    [1x3 double]
    'auto'
    [1x3 double]
    'auto'
    [1x3 double]
    'auto'
    [1x3 double]
    'auto'
    [1x3 double]
    [1x3 double]
    [1x3 double]
    [1x3 double]
    [1x3 double]
    [1x3 double]
    [1x3 double]
    Comment plotter le nouveau graph (contenant toutes les données) avec les couleurs ? Merci :)

    PS : le warning Matlab est
    Color value must be a 3 element numeric vector

  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 884
    Points
    52 884
    Par défaut
    Citation Envoyé par labtoy Voir le message
    Puis je plot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot([xmat1 xmat2],[ymat1 ymat2],'o','MarkerEdgeColor',[edgecolor1;edgecolor2],'MarkerFaceColor',[facecolor1;facecolor2])
    Ecris simplement la commande sur deux lignes en utilisant hold on :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    figure
    plot(xmat1,ymat1,'o','MarkerEdgeColor',edgecolor1,'MarkerFaceColor',facecolor1)
    hold on
    plot(xmat2,ymat2,'o','MarkerEdgeColor',edgecolor2,'MarkerFaceColor',facecolor2)
    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
    En fait, le problème reste le même : les formats de edgecolor1 et edgcolor2 sont toujours des tableaux, et ne peuvent donc pas être pris en compte comme des couleurs ...

    Je pensais enregistrer chacune des couleurs utilisées (edgecolor{i}) dans un tableau dans leur ordre d'utilisation et autant de fois qu'elles sont utilisées. On aurait alors une variable du type
    edgecolors = {edgecolor{1} edgecolor{2} edgecolor{2} edgecolor{2} edgecolor{3} ...};
    Puis j'aurais écris un boucle pour plotter les couleurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for i = 1:length(edgecolors1)
        plot(xmat1,ymat1,'o','MarkerEdgeColor',edgecolors1{i},'MarkerFaceColor',facecolors1{i})
        hold on
    end
    for i = 1:length(edgecolors2)
        plot(xmat2,ymat2,'o','MarkerEdgeColor',edgecolors2{i},'MarkerFaceColor',facecolors2{i})
        hold on
    end
    Mais comment faire pour "enregistrer chacune des couleurs utilisées dans un tableau dans leur ordre d'utilisation et autant de fois qu'elles sont utilisées" ?
    J'avais pensée à changer la boucle for telle que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for i = 1:sx(1)
        ssx = size(xx{i});
        for j = 1:ssx(2)
            xmat(k) = xx{i}(j);
            ymat(k) = yy{i}(j);
            edgecolors{k} = edgecolor{i};
            facecolors{k} = facecolor{i};
            k = k+1;
        end
    end
    mais Matlab me warns :
    ??? Cell contents assignment to a non-cell array object.
    ...

  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 884
    Points
    52 884
    Par défaut
    Effectivement , j'ai répondu un peu vite

    Pourquoi ne pas simplement faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    h = findobj('type','line');
     
    for n = 1:numel(h)
        x{n} = get(h(n),'xdata');
        y{n} = get(h(n),'ydata');
        edgecolor{n} = get(h(n),'MarkerEdgeColor');
        facecolor{n} = get(h(n),'MarkerFaceColor');
    end
     
    xmat1 = x;
    ymat1 = y;
    edgecolor1 = edgecolor;
    facecolor1 = facecolor;
    et ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    figure
     
    hold on
     
    for n = 1:numel(xmat1)
        plot(xmat1{n},ymat1{n},'o','MarkerEdgeColor',edgecolors1{n},'MarkerFaceColor',facecolors1{n})
    end
    ?
    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
    Ca marche, merci beaucoup. C'est la première fois que j'utilisais findobj, du coup ce fut assez laborieux. Mais le problème est réglé, super.

    Bon WE !

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

Discussions similaires

  1. [VBA-E] Changement de couleur d'un point d'une série dans un graphique ?
    Par epfyffer dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/02/2020, 11h59
  2. [plot] couleur avec hsv + point
    Par Newenda dans le forum MATLAB
    Réponses: 5
    Dernier message: 17/02/2010, 16h08
  3. jeu de couleurs dans power point
    Par j-p du chesnay dans le forum Powerpoint
    Réponses: 5
    Dernier message: 21/04/2007, 16h44
  4. Couleur du pixel pointé par la sourie
    Par algerian dans le forum Windows
    Réponses: 4
    Dernier message: 16/08/2005, 18h22
  5. recuperer la couleur d'un point
    Par gaut dans le forum DirectX
    Réponses: 17
    Dernier message: 30/11/2004, 12h47

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