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 multiples variables


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    M2
    Inscrit en
    Janvier 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : M2

    Informations forums :
    Inscription : Janvier 2018
    Messages : 22
    Par défaut Plot multiples variables
    Bonjour,

    Voici ce que j'aimerai réalisé :

    Considérons une matrice A de 10 colonnes correspondant à 10 variables et de 100 lignes correspondant au temps.
    Le plot consiste donc à tracer l'évolution de ces variables selon le temps : plot(t,A) avec t un vecteur contenant les 100 incrémentation de temps
    Cependant, j'aimerai pouvoir déterminer par exemple 1 couleur pour chaque groupe de 2 variables, et au sein de chaque groupe de couleur un type de tracé (pointillé, ligne continu...) pour chaque variable.

    Je peux obtenir le résultat voulu en faisant un plot(...) à rallonge mais je cherche une solution plus optimisée ?
    L'idée étant aussi d'avoir au final une solution plastique, qui peut s'adapter automatiquement à un nombre différent de variables, ou une taille de groupe différente

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut
    Bonjour,

    Une idée pour 4 colonnes (avec une boucle hélas !) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    clear
    Nl=10;
    M=zeros(Nl,4);
    M(:,1)=1:Nl;
    M(:,2)=2*(1:Nl);
    M(:,3)=3*(1:Nl);
    M(:,4)=4*(1:Nl);
    C=['sr';'*r';'.b';'db']
    hold on
    grid
    for i=1:4
        plot(1:Nl,M(:,i),C(i,:))
    end

  3. #3
    Membre averti
    Homme Profil pro
    M2
    Inscrit en
    Janvier 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : M2

    Informations forums :
    Inscription : Janvier 2018
    Messages : 22
    Par défaut
    Intéressant merci, c'est nettement plus plastique que ce que j'avais pour le moment.

    Une boucle sur un plot c'est quelque chose à éviter en principe ? ça peut rapidement devenir lent ?

  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 317
    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 317
    Par défaut
    Citation Envoyé par Rorchar Voir le message
    Une boucle sur un plot c'est quelque chose à éviter en principe ? ça peut rapidement devenir lent ?
    Dans ce cas, tu peux utiliser cette variante :

    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
    clear
    Nl = 10;
    M = zeros(Nl,4);
    M(:,1) = 1:Nl;
    M(:,2) = 2*(1:Nl);
    M(:,3) = 3*(1:Nl);
    M(:,4) = 4*(1:Nl);
     
    lst = {'none' 'none' 'none' 'none'};
    col = {'r' 'r' 'b' 'b'};
    mrk = {'s' '*' '.' 'd'};
     
    figure
     
    h = plot(M);
     
    grid on
     
    for n = 1:numel(h)
        set(h(n), 'linestyle', lst{n}, 'color', col{n}, 'marker', mrk{n})
    end

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Une autre solution sans boucle mais qui permet de gérer uniquement la couleur des courbes :

    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
    clear
    Nl = 10;
    M = zeros(Nl,4);
    M(:,1) = 1:Nl;
    M(:,2) = 2*(1:Nl);
    M(:,3) = 3*(1:Nl);
    M(:,4) = 4*(1:Nl);
     
    col = [1 0 0 ; 1 0 0 ; 0 0 1 ; 0 0 1];
     
    figure
     
    set(groot, 'DefaultAxesColorOrder', col)
     
    plot(M);
     
    set(groot, 'DefaultAxesColorOrder', 'remove')
     
    grid on
    L'objet groot est disponible depuis la version R2014b de MATLAB. Pour les versions précédentes, il faut essayer avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set(0, 'DefaultAxesColorOrder', col)
     
    set(0, 'DefaultAxesColorOrder', 'remove')

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut
    Bonjour,

    Une boucle sur un plot c'est quelque chose à éviter en principe ? ça peut rapidement devenir lent ?

    En général utiliser des boucles est une solution de facilité.

    MATALB a été conçu pour les calculs matriciels : MATrix LABoratory.

    Utiliser les vecteurs est donc plus élégant et plus rapide. Mais parfois on ne peut pas faire autrement !

  7. #7
    Membre averti
    Homme Profil pro
    M2
    Inscrit en
    Janvier 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : M2

    Informations forums :
    Inscription : Janvier 2018
    Messages : 22
    Par défaut
    Merci Jérôme, très pratique !

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

Discussions similaires

  1. [Débutant] Get Set de multiples variables dans une classe
    Par lupus5 dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 30/05/2016, 07h41
  2. Imputation multiple Variables catégorielles
    Par ferari dans le forum SAS STAT
    Réponses: 2
    Dernier message: 03/01/2016, 06h52
  3. Multiples vérifications sur multiples variables
    Par Morby dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 03/01/2012, 17h25
  4. [matlab] Equation différentielle à multiples variables
    Par Bulveye dans le forum Mathématiques
    Réponses: 1
    Dernier message: 10/02/2011, 14h46
  5. [EJBQL] Multiple Variable et ClassCastException
    Par alfsalim dans le forum Java EE
    Réponses: 4
    Dernier message: 23/12/2005, 16h40

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