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 :

[eval] Légende groupée pour plot


Sujet :

Interfaces Graphiques

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [eval] Légende groupée pour plot
    Bonjour,

    J'utilise la fonction eval pour tracer des nuages de points à partir de matrices.
    Par exemple je trace les points des matrices ip1, ip2, ... ip6 en rouge, celles des matrices ix1, ... ix6 en vert, etc.
    Je voudrais que dans ma légende les couleurs (rouge, vert, etc) n'apparaissent qu'une fois (pour les associer au texte 'IP', 'IX', etc).

    Actuellement, je procède comme il suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    % Exemple avec ip et ix seulement
    for i = 1:6
        if eval(['ip' num2str(i)]) ~= 0
            C(i) = plot(eval(['ip' num2str(i) '(:,1)']),log10(eval(['ip' num2str(i) '(:,5)'])),'o','MarkerFaceColor','r','MarkerEdgeColor','r');
        end
    end
    for i = 7:12
        if eval(['ix' num2str(i)]) ~= 0
            C(i) = plot(eval(['ix' num2str(i) '(:,1)']),log10(eval(['ix' num2str(i) '(:,5)'])),'o','MarkerFaceColor','g','MarkerEdgeColor','g');
        end
    end
    et à la fin, je demande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    names = {'IP','IX'};
    ind = [1 7];
    legend(C(ind),names,'Location','SouthEast');
    Le problème : ça ne marche pas à tous les coups ... :
    Error using ==> legend at 206
    Handle must be an axes or child of an axes.
    Une idée du pourquoi ?

    Merci !!

    PS : j'ai essayé d'utiliser 'hggroup', 'parent' et ce genre de choses (dont je ne suis absolument pas familière) mais je ne vois pas comment faire en utilisant des 'eval' et des 'num2str' ...
    Dernière modification par Invité ; 05/07/2011 à 21h21. Motif: Insertion de code = ajout des balises [code] (bouton # de l'éditeur), erreurs = balises [pre]

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

    La fonction eval est à éviter un maximum. Je te conseille de bien lire la Comment créer des variables nommées A1, A2, A3, ...,AN ?.

    Pour ton erreur, la syntaxe que tu utilises étant bonne, à mon avis tes conditions sur les itérations 1 et 7 ne sont pas toujours vraies, et ainsi C(1) et C(7) ne contiennent alors pas toujours de handle valide.

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

    Merci pour ta réponse Winjerome.
    En ce qui concerne la fonction eval, je sais que son utilisation est déconseillée mais cela ne semble pas poser de problème dans mon cas particulier et permet d'alléger l'écriture ...

    A propos de la légende, j'ai résolu mon problème. Effectivement, C(1) et C(7) étaient parfois vides. A présent, j'appelle mes plots A(1),...A(6) et B(7)...B(12) et je remplace C(1) en utilisant first(A) et C(7) en utilisant first(B). J'ai ainsi le premier non nul (fonction first).

    Merci de ton aide !
    A bientôt.

    Marion

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par labtoy Voir le message
    la fonction eval [...] permet d'alléger l'écriture ...
    Justement non c'est le contraire, voici ce que ton code donnerait avec le contenu de la FAQ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for i = 1:6
        if ip{i} ~= 0
            C(i) = plot(ip{i}(:,1),log10(ip{i}(:,5)),'o','MarkerFaceColor','r','MarkerEdgeColor','r');
        end
    end
    for i = 7:12
        if ix{i} ~= 0
            C(i) = plot(ix{i}(:,1),log10(ix{i}(:,5)),'o','MarkerFaceColor','g','MarkerEdgeColor','g');
        end
    end
    Beaucoup plus clair et lisible, non?

    Par contre une remarque: je vois par la formule des plot que tes ip{i} et ix{i} sont des tableaux. Donc tes lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ip{i} ~= 0
    if ix{i} ~= 0
    Ont peut-être besoin des fonctions
    Dernière modification par Invité ; 17/12/2011 à 22h09.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ah d'accord, je n'avais pas compris la faq comme ça. Super alors ! Ca m'embêtait un peu d'avoir des eval à vrai dire. Je ne trouvais pas d'autre solution. Mais effectivement, c'est beaucoup plus claire comme ça. Merci !

    Il ne s'agit pas de scalaires non. Je pensais que cette écriture éviterait simplement le cas de la matrice nulle, puisque j'initialise au début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ip{i} = zeros;
    ix{i} = zeros;
    Je jette un oeil aux fonctions que tu me conseilles.
    Dernière modification par Invité ; 11/07/2011 à 20h44. Motif: [\code] => [/code]

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

    Avant de jeter un oeil aux fonctions any et all, j'aimerais résoudre un petit souci : j'initialise mes matrices class1, class2, etc de la manière suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i =1:12
        class{i} = zeros;
    end
    Et j'obtiens le message d'erreur

    ??? Cell contents assignment to a non-cell array object.
    Je ne vois vraiment pas le problème ...

    PS : changement de dénomination : les matrices class1, class2 ... class6 sont les anciennes matrices ip1, ... ip6 et les matrices class7, ... class12 sont les anciennes matrices ix7, ... ix12
    Dernière modification par Jerome Briot ; 18/07/2011 à 13h42. Motif: Ajout balises [code][/code] et [pre][/pre]

Discussions similaires

  1. Perdu dans les Groupes pour mise en forme jours/semaines
    Par StefC30 dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 02/04/2008, 14h13
  2. Réponses: 6
    Dernier message: 10/08/2007, 13h38
  3. Réponses: 8
    Dernier message: 04/02/2007, 15h14

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