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] Une couleur par ligne [Débutant]


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut [plot] Une couleur par ligne
    Bonjour

    J'ai regarder sur la FAQ les possibilité pour changer la couleur des plots, et je suis tombé sur ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    nCourbes=10;
    couleurs=hsv(nCourbes);
     
    for n=1:nCourbes
        h(n)=line(rand(3,1),rand(3,1),'color',couleurs(n,:));
    end
     
    legend(h,num2str([1:nCourbes].'));
    Le problème c'est que je n'arrive pas à l'adapter à mon code.

    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
    h.fi=figure('color',[1 1 1], 'Units','pixels','position',[1 1 1680 929]);
     
    h.ax(1)=subplot(2,1,1);
    set(h.ax,'fontname','arial','fontsize',14);
    plot(Xpos{1}(:,3),mupos{1},':c',Xpos{2}(:,3),mupos{2},'b',Xpos{3}(:,3),mupos{3},'r',Xpos{4}(:,3),mupos{4},'m',Xpos{5}(:,3),mupos{5},'c',Xpos{6}(:,3),mupos{6},'g',Xpos{7}(:,3),mupos{7},'y',Xpos{8}(:,3),mupos{8},'k');
    xlabel('nombre de cycle', 'fontname','arial','fontsize',12,'fontweight','bold')
    ylabel('µ_a_p_p', 'fontname','arial','fontsize',12,'fontweight','bold')
    h.dx=legend('Ag 2.4mm (4-1)','Ag 1.6mm (4-2)','Ag 2.4mm (5-1)','Ag 1.6mm (5-2)','Ag 1.6mm (6-1)','Ag 2.4mm (6-1)','Ag 1.6mm (7-1)','Ag 2.4mm (7-1)','Location','Best');
    set(h.dx,'fontname','arial','fontsize',10);
    title({'Essais sur les échantillons Au 0.5µm et 1µm , 0.5N, 2000c, bille argent','Evolution du coefficient de frottement ','en fonction du nombre de cycles (partie positive)'});
     
     
    h.bx(1)=subplot(2,1,2);
    set(h.bx,'fontname','arial','fontsize',14);
    plot(Xneg{1}(:,3),muneg{1},'c',Xneg{2}(:,3),muneg{2},'b',Xneg{3}(:,3),muneg{3},'r',Xneg{4}(:,3),muneg{4},'m',Xneg{5}(:,3),muneg{5},'c',Xneg{6}(:,3),muneg{6},'g',Xneg{7}(:,3),muneg{7},'y',Xneg{8}(:,3),muneg{8},'k');
    xlabel('nombre de cycle', 'fontname','arial','fontsize',12,'fontweight','bold')
    ylabel('µ_a_p_p', 'fontname','arial','fontsize',12,'fontweight','bold')
    h.cx=legend('Ag 2.4mm (4-1)','Ag 1.6mm (4-2)','Ag 2.4mm (5-1)','Ag 1.6mm (5-2)','Ag 1.6mm (6-1)','Ag 2.4mm (6-1)','Ag 1.6mm (7-1)','Ag 2.4mm (7-1)','Location','Best');
    set(h.cx,'fontname','arial','fontsize',10);
    title({'Essais sur les échantillons Au 0.5µm et 1µm , 0.5N, 2000c, bille argent','Evolution du coefficient de frottement ','en fonction du nombre de cycles (partie négative)'});
    Je ne sais pas si le code est trés propre mais il marche. Il ne me manque qu'une couleur pour différencier les 8 courbes. Je ne peux pas les tracer en blanc car le fond de mon écran est blanc.

    Pouvez vous m'aider?

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Au premier abord ca devrait donner quelquechose comme ca (pour une partie de ton exemple en tout cas):

    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
     
     
    % Définition du nombre de couleurs
    nb_couleurs = 8;
     
    % Définition d'une colormap
    couleurs = hsv(nb_couleurs);
     
    % Création de la fenêtre
    h.fi=figure('color',[1 1 1], 'Units','pixels','position',[1 1 1680 929]);
     
    % Création de l'axe
    h.ax(1)=subplot(2,1,1);
     
    % Définition des propriétés de l'axe
    set(h.ax(1), 'NextPlot', 'add'); % Permet de tracer toutes les courbes sur le même axe (sans effacer les précédentes).
     
    % Tracé des courbes
    for i_plot = 1:nb_couleurs
    plot(Xpos{1}(:,3),mupos{1},couleurs(:,i_plot));
    end
    Voilà, à tester, j'espère que çà marche mais l'idée est là...

    Bon courage,
    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  3. #3
    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
    En remplaçant le 1 dans X{1} et mupos{1} par i_plot ce sera bon
    Règles du Forum

    Adepte de la maïeutique

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    j'ai essayé le morceau de code que vous m'avez donné, et il me retourne cette erreur :
    ??? Error using ==> plot
    Data must be a single matrix Y or a list of pairs X,Y

    Error in ==> Untitled3 at 43
    plot(Xpos{1}(:,3),mupos{1},couleurs(:,i_plot));
    J'ai aussi essayé en remplaçant 1 par i_plot et j'ai la même erreur...

  5. #5
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Citation Envoyé par Caro-Line Voir le message
    En remplaçant le 1 dans X{1} et mupos{1} par i_plot ce sera bon
    Oups lol


    Citation Envoyé par mygwel
    j'ai essayé le morceau de code que vous m'avez donné
    Est-ce que simplement çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    plot(Xpos{1}(:,3),mupos{1});
    fonctionne?

    Si c'est pas le cas, c'est que les 2 variables Xpos{1}(:,3) et mupos{1} ne sont pas des vecteurs comme MatLab s'y attend...

    @+
    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  6. #6
    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
    Oui l'indice de couleurs est mal placé aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot(Xpos{i_plot}(:,3),mupos{i_plot},couleurs(i_plot,:));
    Mais ton message d'erreur correspond plus à un problème sur tes variables Xpos et mupos.
    Le 1er code que tu nous as montré fonctionnait ?
    Règles du Forum

    Adepte de la maïeutique

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    oui le tous premier code fonctionnait bien, il y a juste un pb au niveau des couleurs car il y a 2 courbes de la même couleur. mais sinon ça marche sans problème.

    J'ai essayé avec la modif et matlab me retourne la même erreur...

    je vous met tous mon code qui fonctionne :
    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
    clear all
    close all
    % appel de fichier
    [FileName,PathName] = uigetfile('*.txt','sélectionnez les 8 fichiers texte', 'MultiSelect', 'on');
    cd(PathName);
    for n=1:8
        fullfile(PathName, FileName{n});
        h.fid{n} = fopen(fullfile(PathName,FileName{n}),'rt');
        for k=1:46
            fgetl(h.fid{n});
        end
        X{n}= fscanf(h.fid{n},'%f',[7,inf]).';
        fclose(h.fid{n});
     
        idx{n} = X{n}(:,4)>0;
        Xpos{n} = X{n}(idx{n},:);
        Xneg{n} = X{n}(~idx{n},:);
     
        h.meanneg{n}=mean(-Xneg{n}(:,4));
        h.meanpos{n}=mean(Xpos{n}(:,4));
     
        mupos{n}=smooth(Xpos{n}(:,4),1000,'moving');
        muneg{n}=smooth(-Xneg{n}(:,4),1000,'moving');
    end
     
    % Réglage couleur de fond et dimension de la fenêtre de graphique
    h.fi=figure('color',[1 1 1], 'Units','pixels','position',[1 1 1680 929]);
     
    h.ax(1)=subplot(2,1,1);
    set(h.ax,'fontname','arial','fontsize',14);
    plot(Xpos{1}(:,3),mupos{1},':c',Xpos{2}(:,3),mupos{2},'b',Xpos{3}(:,3),mupos{3},'r',Xpos{4}(:,3),mupos{4},'m',Xpos{5}(:,3),mupos{5},'c',Xpos{6}(:,3),mupos{6},'g',Xpos{7}(:,3),mupos{7},'y',Xpos{8}(:,3),mupos{8},'k');
    xlabel('nombre de cycle', 'fontname','arial','fontsize',12,'fontweight','bold')
    ylabel('µ_a_p_p', 'fontname','arial','fontsize',12,'fontweight','bold')
    h.dx=legend('Ag 2.4mm (4-1)','Au 2.4mm (4-1)','Ag 2.4mm (5-1)','Au 2.4mm (5-1)','Location','Best');
    set(h.dx,'fontname','arial','fontsize',10);
    title({'Essais sur les échantillons Au 0.5µm et 1µm, 0.5N, 2000c, bille or et argent diamètre 2.4mm','Evolution du coefficient de frottement ','en fonction du nombre de cycles (partie positive)'});
     
     
    h.bx(1)=subplot(2,1,2);
    set(h.bx,'fontname','arial','fontsize',14);
    plot(Xneg{1}(:,3),muneg{1},'c',Xneg{2}(:,3),muneg{2},'b',Xneg{3}(:,3),muneg{3},'r',Xneg{4}(:,3),muneg{4},'m',Xneg{5}(:,3),muneg{5},'c',Xneg{6}(:,3),muneg{6},'g',Xneg{7}(:,3),muneg{7},'y',Xneg{8}(:,3),muneg{8},'k');
    xlabel('nombre de cycle', 'fontname','arial','fontsize',12,'fontweight','bold')
    ylabel('µ_a_p_p', 'fontname','arial','fontsize',12,'fontweight','bold')
    h.cx=legend('Ag 2.4mm (4-1)','Au 2.4mm (4-1)','Ag 2.4mm (5-1)','Au 2.4mm (5-1)','Location','Best');
    set(h.cx,'fontname','arial','fontsize',10);
    title({'Essais sur les échantillons Au 0.5µm et 1µm, 0.5N, 2000c, bille or et argent diamètre 2.4mm','Evolution du coefficient de frottement ','en fonction du nombre de cycles (partie négative)'});

  8. #8
    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
    Oui il manquait encore quelque chose...(soupir...)

    Quand on donne la couleur sous forme de vecteur il faut rajouter le paramètre 'color' sinon il croit que c'est un vecteur donné pour le tracé.
    Donc au final on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot(Xpos{i_plot}(:,3),mupos{i_plot},'color',couleurs(i_plot,:));
    Règles du Forum

    Adepte de la maïeutique

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    ça me trace bien toutes les courbes, mais le pb c'est qu'il me les ouvre toutes dans une fenêtre séparé...

  10. #10
    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
    Tu as bien rajouté cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    % Définition des propriétés de l'axe
    set(h.ax(1), 'NextPlot', 'add'); % Permet de tracer toutes les courbes sur le même axe (sans effacer les précédentes).
    Sinon tu peux aussi utiliser :juste avant la boucle FOR
    Règles du Forum

    Adepte de la maïeutique

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    oui le code est bien ajouté, j'ai essayé avec hold on et ça ne fonctionne pas non plus.

    voilà le code :
    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
    clear all
    close all
    % appel de fichier
    [FileName,PathName] = uigetfile('*.txt','sélectionnez les 8 fichiers texte', 'MultiSelect', 'on');
    cd(PathName);
    for n=1:8
        fullfile(PathName, FileName{n});
        h.fid{n} = fopen(fullfile(PathName,FileName{n}),'rt');
        for k=1:46
            fgetl(h.fid{n});
        end
        X{n}= fscanf(h.fid{n},'%f',[7,inf]).';
        fclose(h.fid{n});
     
        idx{n} = X{n}(:,4)>0;
        Xpos{n} = X{n}(idx{n},:);
        Xneg{n} = X{n}(~idx{n},:);
     
        h.meanneg{n}=mean(-Xneg{n}(:,4));
        h.meanpos{n}=mean(Xpos{n}(:,4));
     
        mupos{n}=smooth(Xpos{n}(:,4),1000,'moving');
        muneg{n}=smooth(-Xneg{n}(:,4),1000,'moving');
     
        % Définition du nombre de couleurs
        nb_couleurs = 8;
     
        % Définition d'une colormap
        couleurs = hsv(nb_couleurs);
     
        % Création de la fenêtre
        h.fi=figure('color',[1 1 1], 'Units','pixels','position',[1 1 1680 929]);
     
        % Création de l'axe
        h.ax(1)=subplot(2,1,1);
     
        % Définition des propriétés de l'axe
        set(h.ax(1), 'NextPlot', 'add'); % Permet de tracer toutes les courbes sur le même axe (sans effacer les précédentes).
        hold on
        % Tracé des courbes
        for i_plot = 1:nb_couleurs
          plot(Xpos{n}(:,3),mupos{n},'color',couleurs(i_plot,:));
        end
    end

  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
    C'est bizarre.
    Peux-tu essayer ce code en ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    nb_couleurs=8;
    couleurs=hsv(nb_couleurs);
    h.ax(1)=subplot(2,1,1);
     
    % Définition des propriétés de l'axe
    set(h.ax(1), 'NextPlot', 'add'); % Permet de tracer toutes les courbes sur le même axe (sans effacer les précédentes).
    %hold on
    % Tracé des courbes
    for i_plot = 1:nb_couleurs
        %plot(Xpos{n}(:,3),mupos{n},'color',couleurs(i_plot,:));
        plot(rand(3,1),rand(3,1),'color',couleurs(i_plot,:));
    end
    Chez moi cela fonctionne bien.
    Règles du Forum

    Adepte de la maïeutique

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    avec ce code j'ai bien toute les lignes sur le même graph

  14. #14
    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
    Oui ben forcément c'est toujours les erreurs les plus ...(je ne sais trop quel mot mettre) évidentes que l'on ne voit pas.
    Ce morceau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        for i_plot = 1:nb_couleurs
          plot(Xpos{n}(:,3),mupos{n},'color',couleurs(i_plot,:));
        end
    Il n'y a rien qui te choque dans l'indexage ?
    Règles du Forum

    Adepte de la maïeutique

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 93
    Points : 55
    Points
    55
    Par défaut
    OK c'est bon!! Alors comme j'avais mis le morceau de code dans une boucle for qui implémentait les variable Xpos et mupos avec n, je pensais qu'il fallait que je garde n comme indexage. j'ai donc remplacé n par i_plot mais toujours dans la boucle for, et ça ne me traçais qu'une courbe sur les 8.

    En sortant le morceau de code de la boucle for et en gardant i_plot, les 8 courbe sont tracé correctement sur le même graphe!!

    Merci beaucoup de votre aide!!

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

Discussions similaires

  1. [WD14] Changement de couleur par ligne dans une liste
    Par Xsara 167 cv dans le forum WinDev
    Réponses: 35
    Dernier message: 04/11/2010, 15h15
  2. Dans une ListBox, une couleur par ligne
    Par molo2003 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 13/02/2010, 12h17
  3. Comment définir une couleur par ligne dans un objet uicontrol de type Text
    Par VinceDA dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 28/05/2007, 12h13
  4. [VB.NET] Comment remplacer une couleur par une autre?
    Par jazz matazz dans le forum VB.NET
    Réponses: 5
    Dernier message: 11/02/2006, 14h29
  5. TreeView - couleur par ligne
    Par LoicH dans le forum C++Builder
    Réponses: 4
    Dernier message: 20/06/2005, 23h25

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