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 :

[plotyy] Gestion parent/enfants


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juin 2011
    Messages : 23
    Points : 11
    Points
    11
    Par défaut [plotyy] Gestion parent/enfants
    Bonjour

    Imaginons un graphe avec deux axes en ordonnées, avec 2 courbes relatives au premier, et 1 au second. Cela donnerait quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plotyy(x,[y1;y2],x,y3,'plot','plot')
    Le problème vient pour gérer individuellement les courbes y1(x) et y2(x), par exemple, pour modifier les marqueurs, l'épaisseur de traits etc.

    Pour pouvoir agir sur les données du graphe, la commande devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [haxes,curv1,curv2] = plotyy(x,[y1;y2],x,y3,'plot','plot')
    Mais comment manipuler l'objet curv1 pour par exemple, changer les marqueurs de ces courbes ?

    Merci pour votre aide !

  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 : 53 165
    Points
    53 165
    Par défaut
    La variable curv1 est un simple tableau d'identifiants.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [haxes,curv1,curv2] = plotyy(1:5,rand(2,5),1:5,rand(1,5)*10,'plot','plot');
     
    set(curv1(1),'marker','*')
    set(curv1(2),'marker','o')
    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 à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juin 2011
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Tout simplement... bien vu !

    Merci beaucoup, je comprends mieux comment se passe l'indexation maintenant !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juin 2011
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Allez, même question sur l'indexation avec une situation plus complexe. Imaginons deux abscisses différentes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [haxes,curv1,curv2] = plotyy([x1;x2],[y1;y2],x3,y3,'plot','plot')
    Je n'arrive pas à comprendre l'indexation dans ce cas là pour travailler individuellement les courbes y1(x) et y2(x2)...

    Encore un coup de pouce svp !

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Regarde bien la documentation:
    Citation Envoyé par doc plot
    plot(X1,Y1,...,Xn,Yn) plots each vector Yn versus vector Xn [...] If Xn or Yn are matrices, they must be 2-D and the same size, and the columns of Yn are plotted against the columns of Xn.
    Avec la syntaxe [x1;x2],[y1;y2] les couples (x1,y1) et (x2,y2) sont des lignes et non colonnes.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juin 2011
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Désolé mais je vois pas trop ce que cela change : si les inputs sont des vecteurs lignes, on met ";" et si ce sont des vecteurs colonnes ",". Non ?

    Ces deux configurations fonctionnent pour tracer et gérer yn(x). On récupère dans "curv1" un vecteur à n entrées. Et donc pour la gestion des n courbes de l'axe des ordonées n°1 ==> curv1(n)

    Mais quand j'essaie avec yn(xn), la sortie "curv1" prend une dimensions 1x1...

    Je ne sais donc pas comment faire pour pouvoir gérer indépendamment chacun des yn(xn)

  7. #7
    Invité
    Invité(e)
    Par défaut
    Que retournent size(x1),size(x2),size(y1) et size(y2) ?
    Un exemple simple pour te convaincre que cela a son importance:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    x1 = 1:10;
    y1 = x1;
    x2 = 11:20;
    y2 = 20-x2;
     
    x3 = 20:30;
    y3 = x3.^2;
     
    [haxes,curv11,curv22] = plotyy([x1(:) x2(:)],[y1(:) y2(:)],x3,y3,'plot','plot') % par colonne
    figure
    [haxes,curv21,curv22] = plotyy([x1; x2],[y1; y2],x3,y3,'plot','plot') % par ligne

  8. #8
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juin 2011
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Je suis d'accord que ça ne donne pas la même chose, mais encore une fois, le format des entrées conditionne le format de traçage de la fonction "plotyy".
    Pour moi, en indiquant [f1 ; f2 ... fn] les graphes sont bons.

    Concernant les dimensions, voilà ce que j'ai :

    x1 : 50 x 1
    x2 : 100 x 1
    x3 = x2

    y1 : 50 x 1 (ordonnée gauche)
    y2 : 100 x 1 (ordonnée gauche)
    y3 : 100 x 1 (ordonnée droite)

    Mon graphe est ok, mais je n'ai pas le handle pour travailler le format du graphe...

  9. #9
    Invité
    Invité(e)
    Par défaut
    Et pourtant je me permets d'insister.
    Avec les couples (x1,y1) et (x2,y2) que tu donnes, [x1;x2] et [y1;y2] sont de simples vecteurs colonnes 150x1 tu ne traces donc qu'une seule courbe de 150 points.

    Les deux couples ayant un nombre de points différents, tu as deux solutions:
    1. Te servir du handle du premier objet Axes haxes(1) pour tracer le deuxième plot:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      [haxes,curv1,curv2] = plotyy(x1,y1,x3,y3,'plot','plot');
      hold(haxes(1),'on');
      curv1(2) = plot(haxes(1),x2,y2,'r');
    2. Compléter par des NaN pour avoir le même nombre:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      [haxes,curv1,curv2] = plotyy([[x1; NaN(50,1)] x2],[[y1; NaN(50,1)] y2],x3,y3,'plot','plot');
    Dernière modification par Invité ; 27/02/2012 à 14h57.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juin 2011
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    J'ai simplifié mon vrai travail pour faire un exemple simple car je ne m'en sors toujours pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    x1 = 0:10 ;
    x2 = 0:20 ;
    x3 = x2    ;
     
    y1 = 2*x1 ;
    y2 = 2*x2+rand(1,1) ;
    y3 = x3.^4 ;
     
    [haxes,curv1,curv2] = plotyy([[x1 NaN(1,10),x2],[[y1 NaN(1,10),y2],...
    x3,y3,'plot','plot') ;
    Jusque là tout va bien, le graphe par défaut est correct (comme dans mon cas avant malgré les confusions ligne/colonne). Le problème arrive pour la mise en forme du graphe car il n'y pas de handle pour "curv1" dont la dimension est 1x1.

    L'idée est d'avoir un groupe de courbes sur l'axe 1 pour ensuite traiter :

    set(curv1(1),'propriété','valeur') <=> (x1,y1)
    set(curv1(2),'propriété','valeur') <=> (x2,y2)
    set(curv2,'propriété','valeur') <=> (x3,y3)

    Je m'enfonce petit à petit... merci de m'aider à sortir de là

  11. #11
    Invité
    Invité(e)
    Par défaut
    Mes 2 codes pour les données que tu as fournies à ton post précédent devraient marcher. Si ce n'est pas le cas, qu'est-ce que tu obtiens?

    Pour ce qui est des nouvelles: pareil, regarde leur dimensions. Il faut que tu fournisses 2 colonnes pour avoir 2 courbes. Je te renvoie à la doc du post #5.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juin 2011
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    J'avais zappé la première idée : ajouter la deuxième courbe dans curv1.
    Ça a l'air de marcher et en plus le handle est bien indexé (curv(n) etc...)
    En plus, c'est plus simple vu qu'on s'abstient du dimensionnement ajusté avec la fonction NaN.

    Par contre la deuxième, ça ne donne rien. Il doit encore y avoir quelque chose qui m'échappe...

    Une soluce fonctionnel sur deux, c'est déjà pas si mal

    Encore merci !

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

Discussions similaires

  1. Treeview : gestion parent/enfant
    Par Masmeta dans le forum Windows Forms
    Réponses: 1
    Dernier message: 22/12/2010, 21h52
  2. Problème requête parent/enfant
    Par Bobtop dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/05/2006, 13h07
  3. [.Net] Echange formulaire parents enfants
    Par Arnaud Malabeux dans le forum C++/CLI
    Réponses: 4
    Dernier message: 15/05/2006, 07h59
  4. [.net] Fenêtres parent/enfant
    Par akrodev dans le forum MFC
    Réponses: 1
    Dernier message: 14/04/2006, 23h54
  5. [VB.NET] Problème liste Parent-Enfant dans DataGrid
    Par vonbier dans le forum ASP.NET
    Réponses: 7
    Dernier message: 27/01/2005, 08h53

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