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 :

Echelle Log problématique


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 30
    Points : 18
    Points
    18
    Par défaut Echelle Log problématique
    Je fais une interface MATLAB. La fenètre graphique que je crée actuellement doit présenter 2 figures avec 2 courbes. Une des figure est en echelles normale, l'autre doit etre en echelle logarithmique. Cependant, lorsque j'execute mon programme, la figure qui devrait etre en logarithme est en echelle normale.
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    global Graph1aN; 
    global Graph1Par; 
    global Graph2aN; 
    global Graph2Par; 
    global courbe1; 
    global courbe2; 
     
    function graphval_OpeningFcn(hObject, eventdata, handles, varargin) 
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 
    %   Variables globales 
    % 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    global Graph1aN; 
    global Graph1Par; 
    global Graph2aN; 
    global Graph2Par; 
    global courbe1; 
    global courbe2; 
     
    % Choose default command line output for graphval 
    handles.output = hObject; 
     
    % Update handles structure 
    guidata(hObject, handles); 
     
    % This sets up the initial plot - only do when we are invisible 
    % so window can get raised using graphval. 
     
    cla(handles.graphsimudadn); 
    set(handles.graphsimuan, 'Visible', 'on'); 
    set(handles.graphsimudadn, 'Visible', 'off'); 
     
    hold on 
    axes(handles.graphsimuan); 
    plot(Graph2aN(:,1),Graph2aN(:,2),Graph1aN(:,1),Graph1aN(:,2)); 
    legend(courbe2,courbe1) 
    grid on 
     
    hold on 
    axes(handles.graphsimudadn); 
    loglog(Graph2Par(:,1),Graph2Par(:,2),Graph1Par(:,1),Graph1Par(:,2)); 
    legend(courbe2,courbe1) 
    grid on 
     
    % UIWAIT makes graphval wait for user response (see UIRESUME) 
    % uiwait(handles.figure1); 
     
     
    % --- Outputs from this function are returned to the command line. 
    function varargout = graphval_OutputFcn(hObject, eventdata, handles) 
     
    % Get default command line output from handles structure 
    varargout{1} = handles.output; 
     
     
    % --- Executes during object creation, after setting all properties. 
    function choixgraph_CreateFcn(hObject, eventdata, handles) 
     
    if ispc 
        set(hObject,'BackgroundColor','white'); 
    else 
        set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); 
    end 
     
    %s'execute lorsqu'on choisi le type de courbe dans le menu déroulant 
    function choixgraph_Callback(hObject, eventdata, handles) 
     
    global Graph1aN; 
    global Graph1Par; 
    global Graph2aN; 
    global Graph2Par; 
    global courbe1; 
    global courbe2; 
     
    %a(N) 
    hold on 
    axes(handles.graphsimuan); 
    plot(Graph2aN(:,1),Graph2aN(:,2),Graph1aN(:,1),Graph1aN(:,2)); 
    legend(courbe2,courbe1) 
    grid on 
     
    %dadn 
    hold on 
    axes(handles.graphsimudadn); 
    loglog(Graph2Par(:,1),Graph2Par(:,2),Graph1Par(:,1),Graph1Par(:,2)); 
    legend(courbe2,courbe1) 
    grid on 
     
    switch get(handles.choixgraph, 'Value') 
        case (1) 
     
            cla(handles.graphsimudadn); 
            set(handles.graphsimudadn, 'Visible', 'off'); 
     
            set(handles.graphsimuan, 'Visible', 'on'); 
            set(handles.titre, 'String', 'Taille de fissure en fonction du nombre de cycles de chargement'); 
            set(handles.ordonnee, 'String', 'Taille de fissure (mm)'); 
            set(handles.absisse, 'String', 'Nombre de cycle'); 
     
        case (2) 
     
            cla(handles.graphsimuan); 
            set(handles.graphsimuan, 'Visible', 'off'); 
     
            set(handles.graphsimudadn, 'Visible', 'on'); 
            set(handles.titre, 'String', 'Vitesse cyclique de fissuration en fonction de l''amplitude du facteur d''intensitée de contrainte') 
            set(handles.ordonnee, 'String', 'Vitesse cyclique de fissuration (m/cycle)'); 
            set(handles.absisse, 'String', 'Amplitude du facteur d''intensité de contrainte (MPa.m^{1/2})'); 
     
    end

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    >< Désolé, je croyais avoir mis code...

    Pour information, j'avais réussi auparavant à mettre en logarithme dans le même programme, mais je n'avais pas vu que ca ne marchait plus. C'est sans doute après avoir mis les légendes que c'est parti. mais même en enlevant les légendes, ca ne marche pas...

    Voici le code en un peu plus simplifié:
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    function graphval_OpeningFcn(hObject, eventdata, handles, varargin) 
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 
    %   Variables globales 
    % 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    Graph1aN=[ 1 2 ; 30 40 ]
    Graph1Par=[ 0 0 ; 50 0.1 ; 100 0.3  ] %la seconde colonne est en 10^(-5)
    courbe1=’essai’  
     
    cla(handles.graphsimudadn); 
    set(handles.graphsimuan, 'Visible', 'on'); 
    set(handles.graphsimudadn, 'Visible', 'off'); 
     
    hold on 
    axes(handles.graphsimuan); 
    plot(Graph1aN(:,1),Graph1aN(:,2)); 
    legend(courbe1) 
    grid on 
     
    hold on 
    axes(handles.graphsimudadn); 
    loglog(Graph1Par(:,1),Graph1Par(:,2)); 
    legend(courbe1) 
    grid on 
     
    function varargout = graphval_OutputFcn(hObject, eventdata, handles) 
     
    %s'execute lorsqu'on choisi le type de courbe dans le menu déroulant 
    function choixgraph_Callback(hObject, eventdata, handles) 
     
     
    %a(N) 
    hold on 
    axes(handles.graphsimuan); 
    plot(Graph1aN(:,1),Graph1aN(:,2)); 
    legend(courbe1) 
    grid on 
     
    %dadn 
    hold on 
    axes(handles.graphsimudadn); 
    loglog(Graph1Par(:,1),Graph1Par(:,2)); 
    legend(courbe1) 
    grid on 
     
    switch get(handles.choixgraph, 'Value') 
        case (1) 
     
            cla(handles.graphsimudadn); 
            set(handles.graphsimudadn, 'Visible', 'off'); 
     
            set(handles.graphsimuan, 'Visible', 'on'); 
            set(handles.titre, 'String', 'Taille de fissure en fonction du nombre de cycles de chargement'); 
            set(handles.ordonnee, 'String', 'Taille de fissure (mm)'); 
            set(handles.absisse, 'String', 'Nombre de cycle'); 
     
        case (2) 
     
            cla(handles.graphsimuan); 
            set(handles.graphsimuan, 'Visible', 'off'); 
     
            set(handles.graphsimudadn, 'Visible', 'on'); 
            set(handles.titre, 'String', 'Vitesse cyclique de fissuration en fonction de l''amplitude du facteur d''intensitée de contrainte') 
            set(handles.ordonnee, 'String', 'Vitesse cyclique de fissuration (m/cycle)'); 
            set(handles.absisse, 'String', 'Amplitude du facteur d''intensité de contrainte (MPa.m^{1/2})'); 
     
    end

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Bonjour, le problème vient des hold on que tu utilises sur tes figures.

    Matlab ne gère apparemment pas l'affichage multiple dans le cas d'un graphe en log.
    il faut donc que tu passes par deux figures distinctes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    figure(1)
    plot(Graph1aN(:,1),Graph1aN(:,2)); 
    legend(courbe1) 
    grid on 
     
    figure(2) 
    loglog(Graph1Par(:,1),Graph1Par(:,2)); 
    legend(courbe1) 
    grid on

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Merci, :s cependant, la solution dont tu me parles ne me permet pas de garder ca dans ma "jolie" interface graphique, ce qu'on me demande...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Et si tu passes par un subplot pour n'avoir qu'une figure, ca serait mieux ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    figure
    subplot(2,1,1)
    plot(Graph1aN(:,1),Graph1aN(:,2)); 
    legend(courbe1) 
    grid on 
    subplot(2,1,2)
    loglog(Graph1Par(:,1),Graph1Par(:,2)); 
    legend(courbe1) 
    grid on

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    En fait, il faudrait dans ce cas que je sache comment entrer le graphe autrement dans mon image d'interface (avec tous pleins de boutons que j'ai crée...)
    Et j'ai tenté de regarder mais ca ne dois pas etre "Hold on" qui me cause autant de soucis, lorsque je met "loglog" pour la courbe aN, qui elle aussi à un "Hold on", il n'y a pas de soucis. J'ai aussi essayé d'échangé Par avec aN et aN marche toujours, pas Par...

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Et si tu essayes de faire d'abord ta courbe en loglog puis ensuite celle en plot, ca donne quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    figure
    loglog(graphePar)
    hold on
    plot(grapheAn)

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Oo Ca marche très bien... je n'ai meême pas besoin de mettre Figure avant le premier... Voici mon code... Je sais qu'il est moche, mais le voici quand même si ca peut aider quelqu'un...
    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
    function graphval_OpeningFcn(hObject, eventdata, handles, varargin)
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %
    %   Variables globales
    %
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    global Graph1aN;
    global Graph1Par;
    global Graph2aN;
    global Graph2Par;
    global courbe1;
    global courbe2;
     
    % Choose default command line output for graphval
    handles.output = hObject;
     
    % Update handles structure
    guidata(hObject, handles);
     
    cla(handles.graphsimuan);
    set(handles.graphsimuan, 'Visible', 'off');
    set(handles.graphsimudadn, 'Visible', 'on');
     
    %dadn
    axes(handles.graphsimudadn);
    loglog(Graph2Par(:,1),Graph2Par(:,2),Graph1Par(:,1),Graph1Par(:,2));
    legend(courbe2,courbe1)
    grid on
    puis plus loin:
    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
    function choixgraph_Callback(hObject, eventdata, handles)
     
    global Graph1aN;
    global Graph1Par;
    global Graph2aN;
    global Graph2Par;
    global courbe1;
    global courbe2;
     
    switch get(handles.choixgraph, 'Value')
     
        case (1)
     
            cla(handles.graphsimuan);
            set(handles.graphsimuan, 'Visible', 'off');
     
            %dadn
            hold on
            axes(handles.graphsimudadn);
            loglog(Graph2Par(:,1),Graph2Par(:,2),Graph1Par(:,1),Graph1Par(:,2));
            legend(courbe2,courbe1)
            grid on
     
            set(handles.graphsimudadn, 'Visible', 'on');
            set(handles.titre, 'String', 'Vitesse cyclique de fissuration en fonction de l''amplitude du facteur d''intensitée de contrainte')
            set(handles.ordonnee, 'String', 'Vitesse cyclique de fissuration (m/cycle)');
            set(handles.absisse, 'String', 'Amplitude du facteur d''intensité de contrainte (MPa.m^{1/2})');
     
        case (2)
     
            cla(handles.graphsimudadn);
            set(handles.graphsimudadn, 'Visible', 'off');
     
            %a(N)
            hold on
            axes(handles.graphsimuan);
            plot(Graph2aN(:,1),Graph2aN(:,2),Graph1aN(:,1),Graph1aN(:,2));
            legend(courbe2,courbe1)
            grid on
     
            set(handles.graphsimuan, 'Visible', 'on');
            set(handles.titre, 'String', 'Taille de fissure en fonction du nombre de cycles de chargement');
            set(handles.ordonnee, 'String', 'Taille de fissure (mm)');
            set(handles.absisse, 'String', 'Nombre de cycle');
     
    end

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    ^_^ Les joies de la programmation... Si quelqu'un à une idée sur le pourquoi du comment du loglog qui ne passe pas en deuxième graphe, ca pourrait servir... En tout cas, si ca marche, c'est le principal

    edit : une remarque en passant: autant que faire se peut, évite d'utiliser des variables globales dans ton code...

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Salut,

    Citation Envoyé par Merel Voir le message
    Si quelqu'un à une idée sur le pourquoi du comment du loglog qui ne passe pas en deuxième graphe, ca pourrait servir
    pas vraiment d'explication, mais une remarque de la doc de loglog :
    If you attempt to add a loglog, semilogx, or semilogy plot to a linear axis mode graph with hold on, the axis mode will remain as it is and the new data will plot as linear.
    Sinon, PantRéTroclit', pour éviter les variales globales dans une GUI, tu peux trouver des alternatives dans ce tutoriel :
    http://briot-jerome.developpez.com/m...uiefficace/#L2
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Expliquez_svp
    Vous pouvez expliquez s-v-p plus si par exemple

    vous avez deux courbes et sans utilisation de function.

    comment ça marche ?

    merci à l'avance




    Citation Envoyé par PantRéTroclit' Voir le message
    Oo Ca marche très bien... je n'ai meême pas besoin de mettre Figure avant le premier... Voici mon code... Je sais qu'il est moche, mais le voici quand même si ca peut aider quelqu'un...
    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
    function graphval_OpeningFcn(hObject, eventdata, handles, varargin)
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %
    %   Variables globales
    %
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    global Graph1aN;
    global Graph1Par;
    global Graph2aN;
    global Graph2Par;
    global courbe1;
    global courbe2;
     
    % Choose default command line output for graphval
    handles.output = hObject;
     
    % Update handles structure
    guidata(hObject, handles);
     
    cla(handles.graphsimuan);
    set(handles.graphsimuan, 'Visible', 'off');
    set(handles.graphsimudadn, 'Visible', 'on');
     
    %dadn
    axes(handles.graphsimudadn);
    loglog(Graph2Par(:,1),Graph2Par(:,2),Graph1Par(:,1),Graph1Par(:,2));
    legend(courbe2,courbe1)
    grid on
    puis plus loin:
    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
    function choixgraph_Callback(hObject, eventdata, handles)
     
    global Graph1aN;
    global Graph1Par;
    global Graph2aN;
    global Graph2Par;
    global courbe1;
    global courbe2;
     
    switch get(handles.choixgraph, 'Value')
     
        case (1)
     
            cla(handles.graphsimuan);
            set(handles.graphsimuan, 'Visible', 'off');
     
            %dadn
            hold on
            axes(handles.graphsimudadn);
            loglog(Graph2Par(:,1),Graph2Par(:,2),Graph1Par(:,1),Graph1Par(:,2));
            legend(courbe2,courbe1)
            grid on
     
            set(handles.graphsimudadn, 'Visible', 'on');
            set(handles.titre, 'String', 'Vitesse cyclique de fissuration en fonction de l''amplitude du facteur d''intensitée de contrainte')
            set(handles.ordonnee, 'String', 'Vitesse cyclique de fissuration (m/cycle)');
            set(handles.absisse, 'String', 'Amplitude du facteur d''intensité de contrainte (MPa.m^{1/2})');
     
        case (2)
     
            cla(handles.graphsimudadn);
            set(handles.graphsimudadn, 'Visible', 'off');
     
            %a(N)
            hold on
            axes(handles.graphsimuan);
            plot(Graph2aN(:,1),Graph2aN(:,2),Graph1aN(:,1),Graph1aN(:,2));
            legend(courbe2,courbe1)
            grid on
     
            set(handles.graphsimuan, 'Visible', 'on');
            set(handles.titre, 'String', 'Taille de fissure en fonction du nombre de cycles de chargement');
            set(handles.ordonnee, 'String', 'Taille de fissure (mm)');
            set(handles.absisse, 'String', 'Nombre de cycle');
     
    end

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/06/2012, 22h47
  2. Transparence Graphique 3D en echelle log
    Par azabdur dans le forum Images
    Réponses: 1
    Dernier message: 04/05/2010, 17h27
  3. Echelle log sur une figure 3D
    Par uknico dans le forum MATLAB
    Réponses: 1
    Dernier message: 19/07/2007, 12h28
  4. [VB6] Graph sur echelle log ?
    Par belfaigore dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 18/09/2006, 07h59
  5. Echelle log-log dans mschart
    Par mb95 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 27/11/2005, 22h35

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