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

Interfaces Graphiques Discussion :

Affichage de plusieurs courbes dans un meme "axes"


Sujet :

Interfaces Graphiques

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Points : 61
    Points
    61
    Par défaut Affichage de plusieurs courbes dans un meme "axes"
    Bonjour,

    J ai une question bete surement mais j ai beau avoir lu les discussions sur le forum et la FAQ (cette fois j y ai pense) et je n arrive toujours pas a afficher mes deux courbes !!!

    Je m explique : j ai un unique "axes" dans mon GUI, j utilise un timer pour appeler une fonction qui collecte des donnees pour mon "axes"...J obtiens donc x echantillons que j desire afficher...

    POur un seul ca marche mais pour deux il m ecrase toujours l autre...
    J ai utilise "hold on, all..." et une syntaxe du genre...plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.') mais cela ne fonctionne pas...

    Je vous mets mon code de ma fonction appelee par le timer :

    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
     
    function timerplot_Callback(obj, event, handlesToAxes, signalName) 
     
    signalName = 'ReSult';
    handlesToAxes = handles.axes1;
     
    % Create the data to plot
    for i=1:5   % 10 samples
     
    x = model_control('SuiteStageModifJan2','get_signal',signalName)
    A(i) = x(1);
    B(i) = x(2);
    pause(1)
    end
     
    plot(handlesToAxes,A(:,1),'-',handlesToAxes,B(:,2),'.'); 
    %Me renvoie "Not enough input arguments."
     
    plot(handlesToAxes,A);
    plot(handlesToAxes,B);
    hold on
    % Le 2e plot ecrase le premier...

    Quelqu un aurait il une idee ou bien ai je loupe qqch???

    Merci d avance...
    MATLAB Version 7.3.0.267 (R2006b)
    Simulink Version 6.5 (R2006b)
    Sous Windows

  2. #2
    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
    Bonjour,

    Effectivement, il y a mauvaise utilisation dans les 2 cas...

    1ère solution : utiliser une seule commande PLOT : il ne faut mettre qu'une seule fois le handle de l'axe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plot(handlesToAxes,A(:,1),'-',B(:,2),'.');
    doit fonctionner (à voir s'il ne faut pas dans ce cas lui mettre explicitement l'axe des abscisses, car si je ne m'abuse, là tu n'as que les ordonnées)

    2ème solution : le HOLD ON : il faut le mettre avant au moins le 2ème tracé. Cette commande modifie le fonctionnement des axes. hold on signifie : "à partir de maintenant tu traces les nouvelles courves dans le même axe", donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    plot(handlesToAxes,A);
    hold on
    plot(handlesToAxes,B);
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Points : 61
    Points
    61
    Par défaut
    Bonjour Caro,

    Merci beaucoup pour ta reponse mais je vais etre embetant car cela ne marche pas...

    J ai un peu modifie mon code, je le mets donc :

    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
    function timerplot_Callback(obj, event, handlesToAxes, signalName) 
    
    global ValueSignalLeft;
    global ValueSignalRight;
    global k;
    
    signalName = 'ReSult';
    
    % Create the data to plot
    x = model_control('SuiteStageModifJan2','get_signal',signalName)
    
    ValueSignalLeft(k) = x(1);
    ValueSignalRight(k) = x(2);
    k = k+1;
    
    % M envoie l erreur : ??? Error while evaluating TimerFcn for timer 'timer-1' 
    %Index exceeds matrix dimensions.
    % plot(handlesToAxes,ValueSignalLeft(:,1),'-',ValueSignalRight(:,2),'.');
    
    % Ici cela m ecrase le premier plot
    plot(handlesToAxes, ValueSignalLeft);
    hold on
    plot(handlesToAxes, ValueSignalRight,'.');
    Je reexplique un peu...En fait mon GUI fait appel a cette fonction chaque seconde via un timer.
    J arrive a garder les valeurs desirees grace au variable globale mais n arrive pas a afficher les deux signaux tous les deux ensemble...

    Cela ne peut peut etre pas fonctionner avec les timers mais cela m etonnerait beaucoup...Qqn aurait il une solution ?

    Merci encore
    MATLAB Version 7.3.0.267 (R2006b)
    Simulink Version 6.5 (R2006b)
    Sous Windows

  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 304
    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 304
    Points : 52 886
    Points
    52 886
    Par défaut
    Mets la propriété NextPlot de l'objet Axes identifié par handlesToAxes à Add et enlève l'appel à HOLD dans 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)

Discussions similaires

  1. [Débutant] Affichage de plusieurs courbes dans un même graphe
    Par franky4doigt dans le forum MATLAB
    Réponses: 7
    Dernier message: 23/02/2015, 20h22
  2. Affichage de plusieurs courbes dans une fonction
    Par Seikyo67 dans le forum MATLAB
    Réponses: 14
    Dernier message: 21/05/2014, 10h03
  3. Affichage de texte en plusieurs partie dans la meme fenetre
    Par ClaudeHarvey dans le forum VBScript
    Réponses: 3
    Dernier message: 28/03/2007, 19h21

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