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 :

Plot de données en .mat dans une GUI [Débutant]


Sujet :

Interfaces Graphiques

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 62
    Points : 61
    Points
    61
    Par défaut Plot de données en .mat dans une GUI
    Bonjour,
    cela fait 5 jours que je débute en programmation GUI sous Matlab. J'ai créé une interface graphique à l'aide de l'outil GUIDE dans lequel j'ai un menu personnalisé.

    A l'ouverture de la GUI, j'ai un objet Axes dans lequel j'affiche un logo de présentation de l'outil que je développe.

    Mon problème est que par la suite je souhaiterai "ploter" des données que je récupère d'un fichier .mat.
    Pour ce faire j'utilise mon menu, donc comme l'indique le code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function new_menu_Callback(hObject, eventdata, handles)
    % hObject    handle to new_menu (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    [fname,pname] = uigetfile('*.mat','Select Saved File');  
    disp(fname)
    if pname==0, error('None selected!'); end
    load(fullfile(pname,fname) );
    put('singal',fname)
    disp('signal')
    plot(signal)
    j'ouvre le fichier et je souhaiterai le définir dans une variable pour pouvoir le tracer dans l'objet Axe que j'ai définit puis l'exploiter pour autre chose.



    Petite explication de ma fonction put:
    Afin d'éviter la redondance de l'utilisation de getappdata et de setappdata, j'ai trouvé ces les fonctions suivantes dans un programme (dont j'aimerai bien avoir une explication plus détaillée, notamment le 0 à la place de h ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function var = retr(name)
    hgui=getappdata(0,'hgui');
    var=getappdata(hgui, name);
     
    %associer une valeur à la figure ou data "name"
    function put(name, what)
    hgui=getappdata(0,'hgui');
    setappdata(hgui, name, what);
    le hgui est définit dans la fonction open de mon gui, comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setappdata(0,'hgui',gcf)

    En vous remerciant d'avance

  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
    0 est l'identifiant de l'objet Root, ancêtre de tous les objets graphiques =>Présentation des objets graphiques

    Sinon je ne sais pas si c'est un problème de copier/coller mais il y a un souci sur cette ligne :

    Pour finir, la fonction what existe déjà, évite donc d'utiliser ce nom pour nommer une variable.
    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
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 62
    Points : 61
    Points
    61
    Par défaut
    J'ai réussi à faire ce que je voulais, à savoir tracer des données d'un fichier .mat grâce à un sujet du forum concernant l'importation de données Excel et une réponse de Caro-Line. Mon problème était la gestion des différentes variables de mon fichier en .mat.

    Je partage donc ma solution. Je ne sais pas si c'est la meilleure des méthodes

    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
    function new_menu_Callback(hObject, eventdata, handles)
    [fname,pname] = uigetfile('*.mat','Select Saved File');  %fname : nom du fichier, pname : nom du path
    if pname==0, error('None selected!'); end
    [pathstr, name, ext] = fileparts(fname)
    if strcmp(ext , '.mat') == 1
        m = load(fullfile(pname,fname) );
        variable = fieldnames(m) %les noms des variables
        if length(variable) == 1
            put('signal',m.(variable{1}))
            plot(m.(variable{1}))
        else
            beep
            msgbox('Il semble que le fichier que vous avez chargé contient plus d''une variable ! Veuillez recharger un nouveau fichier s.v.p', 'Warning !','warn');
        end
    else
        beep
        msgbox('Veuillez choisir un fichier avec une extension ".mat"', 'Error !','error');
    end

  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
    Voici une version plus optimisée qui évite de charger le contenu du fichier mat pour rien :

    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
    function new_menu_Callback(hObject, eventdata, handles)
     
    [fname,pname] = uigetfile('*.mat','Select Saved File');  %fname : nom du fichier, pname : nom du path
     
    if pname==0
        error('None selected!');
    end
     
    [pathstr, name, ext] = fileparts(fname);
     
    if strcmp(ext , '.mat') == 1
     
        info = whos('-file', fullfile(pname,fname));
     
        if numel(info)==1
     
            m = load(fullfile(pname,fname));
            variable = fieldnames(m);
            put('signal', m.(variable{1}))
            plot(m.(variable{1}))
     
        else
     
            beep
            msgbox('Il semble que le fichier que vous avez chargé contient plus d''une variable ! Veuillez recharger un nouveau fichier s.v.p', 'Warning !','warn');
     
        end
     
    else
     
        beep
        msgbox('Veuillez choisir un fichier avec une extension ".mat"', 'Error !','error');
     
    end
    Au passage, le test sur pname (si l'utilisateur clique sur Annuler/Cancel) ne devrait pas déclencher une erreur (appel à error) mais plutôt un retour immédiat dans la fonction appelante (avec return) car ce n'est pas à proprement parlé une erreur .
    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
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 62
    Points : 61
    Points
    61
    Par défaut
    Merci pour la réponse te les petites améliorations. Je ferme le sujet.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 62
    Points : 61
    Points
    61
    Par défaut
    Bonjour,

    Je fais suite à ce sujet afin d'améliorer ma gestion de données.
    Afin de stocker tous les signaux chargés j'ai créé un fichier .mat que je nomme signaux. Etant donnée que je récupère les données de mon fichier afin de les tracer je souhaiterai également les sauvegarder, je réalise cette fonction grâce au code suivant

    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
    function new_menu_Callback(hObject, eventdata, handles)
     
    [fname,pname] = uigetfile('*.mat','Select Saved File');  %fname : nom du fichier, pname : nom du path
     
    [pathstr, name, ext] = fileparts(fname);
     
    if strcmp(ext , '.mat') == 1
     
        info = whos('-file', fullfile(pname,fname));
     
        if numel(info)==1
     
            m = load(fullfile(pname,fname));
            variable = fieldnames(m);
            put('signal', m.(variable{1}))
            plot(m.(variable{1}))
            S = m.variable{1}
            save signaux S        
        end
     
    end
    Mon problème : je souhaiterai sauvegarder dans mon fichier signaux.mat la variable chargée mais avec son nom d'origine, ie avec le contenu stocké dans variable{1}. Pouvez-vous m'aider svp, j'ai essayé plusieurs techniques sans réussir.


    Cordialement,

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Pour la sauvegarde d'un fichier, la fonction uiputfile est plus adaptée.

    Pour ce qui est de pouvoir retranscrire le nom à sauvegarder, voici une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    save('signaux', '-struct', 'm')
    Notes :

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 62
    Points : 61
    Points
    61
    Par défaut
    SUPPERRRRRRRR !! Merci beaucoup

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

Discussions similaires

  1. [Débutant] Accélerez l'update des data de plots dans une GUI
    Par Phidyos dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 10/05/2014, 08h49
  2. Plot dans une GUI
    Par AsmaHaj dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 20/03/2007, 21h01
  3. Réponses: 2
    Dernier message: 04/06/2006, 20h11
  4. [VBA-E]Transfere des données d'Excel dans une table Access
    Par flo83 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/04/2006, 09h22
  5. [ODBC] Récupération d'une donnée pour insertion dans une autre table
    Par rom950 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/03/2006, 17h13

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