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 :

Superposition de graphiques [Débutant]


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 16
    Points : 13
    Points
    13
    Par défaut Superposition de graphiques
    Bonjour,

    Je travail actuellement sur un programme et j'ai besoin de tracer sur un même graph plusieurs courbes.
    Je sais pertinemment qu'il faut utiliser la commande hold on, mais ça coince.

    voici la partie du code à modifier :

    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
     if sortie.csf
      try, figure(csffigid); catch, csffigid=figure('CloseRequestFcn','close_fig_modele_vo(12)'); end
       f=freq_spatial(end/2+1,end/2+1:end);
        plot(f,log10(csf(end/2+1,end/2+1:end)),'b',f,log10(CSFn(end/2+1,end/2+1:end)),'r');
        v=axis; v(1)=0;
        vv=max(f(isfinite(CSFn(end/2+1,end/2+1:end))));
       if isempty(vv), vv=f(end); end
        v(2)=vv;
        axis(v); grid
        xlabel('fréquence spatiale (cycle/degré)'); ylabel('Sensibilité au contraste (log)');
        legend('CSF oeil','CSF neuronale');
       if (modele.modele_neuronal==1)||(modele.modele_neuronal==2) ||( modele.modele_neuronal==3)||(modele.modele_neuronal==4);
        title(['Luminance = ', num2str(objet.lumin*((pi*porteur.etat.pup_diam*porteur.etat.pup_diam)./4)), ' Td']);
       end
        set(gcf, 'name', 'CSF');
        hgsave([sortie.repertoire '\csf']); %sauve la figure au format matlab
    end
    En même temps, ne connaissant pas tout le programme ça va peut-être être dur pour vous de m'aider, j'peux en reposter d'autres parties.

    Je travail aussi avec GUI, l'idée c'est d'avoir une case à cocher dans l'interface qui permette de faire superposer les graphs ou de les tracer un par un.

    Merci d'avance.

  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 828
    Points
    14 828
    Par défaut
    Ce serait surtout bien de nous dire à quel niveau ça coince.
    Parce que là dans ton code il n'y a qu'un seul plot donc à quel moment tu en as plusieurs de tracés ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    Oui ça ne trace qu'un seul graph.
    Je travail sur la sensibilitée au contraste de l'oeil (CSF). Et il existe plusieurs modeles (c'est que pas mal de chercheurs y sont allés de leurs pattes).

    Pour le moment grâce au GUI, je selectionne le modele que je veux voir tracé à l'ecran, et le programme me trace le modele neuronal correspondant.
    Maintenant j'aimerai bien les comparer entre eux, d'ou mon envie de mettre un hold on.

    L'idée finale c'est d'aller sur l'interface graphique, cocher le modele que je veux voir tracé. Le tracer, et retourner sur l'interface graphique pour cocher un autre modele pour que celui-ci soit tracé sur le graph de départ.

  4. #4
    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 828
    Points
    14 828
    Par défaut
    Et bien ton idée d'une case à cocher dans l'interface me parait bien.
    Dans le callback de cette case tu mets quelquechose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    val=get(handle,DuCheckBox,'Value');
    if val %case cochée
       %mode plusieurs tracés
       hold on
    else
       hold off
       %penser peut-être aussi dans ce cas à "clearer" les axes (commande cla)
    end
    Ca pourait convenir ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    J'avais tenté une approche similaire et ça ne marche pas

    pour l'instant la seule alternative qui marche c'est celle là : quand je coche la case voulue j'initie un champ sortie.superpose, et j'ajoute un if dans le code précédent.

    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
    if sortie.csf
        try, figure(csffigid); catch, csffigid=figure('CloseRequestFcn','close_fig_modele_vo(12)'); end
        f=freq_spatial(end/2+1,end/2+1:end);
        if sortie.superpose
            hold on
        end    plot(f,log10(csf(end/2+1,end/2+1:end)),'b',f,log10(CSFn(end/2+1,end/2+1:end)),'r');
        v=axis; v(1)=0;
        vv=max(f(isfinite(CSFn(end/2+1,end/2+1:end))));
       if isempty(vv), vv=f(end); end
        v(2)=vv;
        axis(v); grid
        xlabel('fréquence spatiale (cycle/degré)'); ylabel('Sensibilité au contraste (log)');
        legend('CSF oeil','CSF neuronale');
       if (modele.modele_neuronal==1)||(modele.modele_neuronal==2) ||( modele.modele_neuronal==3)||(modele.modele_neuronal==4);
        title(['Luminance = ', num2str(objet.lumin*((pi*porteur.etat.pup_diam*porteur.etat.pup_diam)./4)), ' Td']);
       end
        set(gcf, 'name', 'CSF');
        hgsave([sortie.repertoire '\csf']); %sauve la figure au format matlab
    end
    A l'ecran j'ai les deux courbes qui s'affichent,c'est déjà un mieux. Maintenant il ne me reste plus qu'a bien redimensionner les axes en fonction des courbes tracées et de mettre différentes couleurs pour s'y retrouver.
    Le grid disparait aussi ce que je ne comprends pas.

  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 828
    Points
    14 828
    Par défaut
    Pour le grid la réponse est simple.
    Dans l'aide :
    Citation Envoyé par Matlab
    grid toggles the major grid visibility state.
    Donc si tu mets grid tout seul il se mettra dans l'état différent de son état actuel. La 1ère fois il est on, la 2ème off.
    Tu peux faire comme ça pour l'avoir en permanence :

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

Discussions similaires

  1. [barh] superposition de graphiques
    Par helaaa dans le forum MATLAB
    Réponses: 2
    Dernier message: 26/09/2011, 14h49
  2. [Débutant] Superposition de graphiques
    Par roudoudounette dans le forum MATLAB
    Réponses: 4
    Dernier message: 19/11/2010, 10h08
  3. [VxiR2] Superposition de graphiques
    Par christelle_s dans le forum Deski
    Réponses: 1
    Dernier message: 16/02/2009, 13h48
  4. [pcolor/contourf] Superposition de graphiques
    Par Merel dans le forum MATLAB
    Réponses: 2
    Dernier message: 02/06/2008, 12h49
  5. superposition de graphiques
    Par papimcha dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 18/04/2008, 10h55

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