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 :

fonction Boxplot appliqué à un tableau de cellules. [Débutant]


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 43
    Points
    43
    Par défaut fonction Boxplot appliqué à un tableau de cellules.
    Bonjour,

    Je m'explique en espérant être claire.
    J'ai un tableau de cellules (nommé tab 1 ligne, plusieurs colonnes). Dans chaque cellules, j'ai des matrices avec un même nombre de colonnes mais un nombre de ligne qui varient entre elles.

    J'aimerai faire un boxplot sur une colonne dite (exemple n°18) de chacune de ces matrices.

    J'ai tenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for n=1:size(tab,2)
    Boxplot(tab{i}(:,18))
    end
    et le message d'erreur est:
    ??? Subscript indices must either be real positive integers or logicals.
    
    Ma question est donc: est ce possible de faire de cette manière et si oui, quelqu'un aurait-il un indice?

    Si non, l'idée d'extraire la fameuse colonne de chacune des matrices (de chaque cellule) et de les mettre dans une seule matrice puis de faire le boxplot. Seul hic, c'est que les colonnes n'ont pas la même taille, comment dans ce cas, mettre des valeurs NaN qui ne sont pas pris en compte par boxplot?

    Merci de votre aide.

    Si ce sont des questions bêtes, soyez indulgent svp!

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    C'est peut-être juste une faute de frappe mais ne mets pas de B majuscule à boxplot.

    A priori ce que tu as fait devrait marcher, mais pour t'aider plus il nous faudrait un peu plus de code...

    De plus, serait-il possible que tu es une variable nommée "Boxplot"?

    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

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

    Une petite étourderie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for n=1:size(tab,2)
        Boxplot(tab{i}(:,18))
    end
    Remarque : c'est Boxplot avec 'b' minuscule. MATLAB est sensible à la case.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    bonjour,

    merci pour votre réponse. j'ai mis une minuscule à boxplot.
    vous trouverez ci joint le type de fichiers que je vais chercher et le code est le 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
     
    cd '...' % les .. represente le chemin de mon dossier
    A=ls;
     
    % On affecte ces fichiers dans un tableau de cellules (cell array) 
    for p=3:size(A,1)
        fid = fopen(A(p,:),'rt');
        r = textscan(fid,repmat('%f ',1,58),'delimiter','\t','HeaderLines',1,'collectOutput',true);
        fclose(fid);
           tab(p-2) = r;
    end
    tab; 
     
     
    for n=1:size(tab,2)
        Boxplot(tab{i}(:,18))
    end
    Fichiers attachés Fichiers attachés

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    autant pour moi, c'est un i la variable de la dernière boucle.

    et dans ce cas, j'ai toutes les boites à moustaches qui se superposent. JE vais chercher dans le forum sur ce point,; je crois avoir déjà vu quelque chose

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    je reviens à l'attaque,

    en effet en faisant boxplot sur mon tableau de cellules, je n'arrive pas à les faire apparaitre sur le meme graph,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i=1:size(tab,2)
       boxplot(tab{i}(:,18),size(tab,2));
    end
    quelqu'un aurait-il une solution?
    Merci beaucoup pour votre précieuse aide

  7. #7
    Invité
    Invité(e)
    Par défaut
    boxplot écrasant l'ancien contenu, il te faut les tracer tous en même temps, et pour ceci on peut utiliser la deuxième syntaxe présentée dans la documentation :
    Citation Envoyé par doc boxplot
    boxplot(X,G) specifies one or more grouping variables G, producing a separate box for each set of X values sharing the same G value or values.
    À partir de tab, on forme un tableau simple où l'on attribue un valeur pour chaque tab{i}(:,18) (par exemple dans ce qui suit : 1 pour les valeurs de tab{1}(:,18) , 2 pour les valeurs de tab{2}(:,18),...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    T = cell2mat( ...
            cellfun( @(c,n) [c(:,18) n*ones(size(c,1),1)] , ...
            tab, num2cell(1:length(tab)) , ...
            'UniformOutput', false).' ...
        );
    X = T(:,1);
    G = T(:,2);
    boxplot(X,G)
    Ou si tu préfères la version boucle, un peu plus compréhensible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    X = [];
    G = [];
    for i = 1:length(tab)
       c = tab{i}(:,18);
       X = [X ; c];
       G = [G ; i*ones(size(c,1),1)]; 
    end
    boxplot(X ,G)
    Dernière modification par Invité ; 19/09/2012 à 03h51.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Points : 43
    Points
    43
    Par défaut
    Super Merci beaucoup

    ca marche!
    Je n'avais pas du tout compris comment fonctionnait G. Merci beaucoup.

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

Discussions similaires

  1. Fonction mesh, tableau de cellules et mémoire
    Par eskapp dans le forum MATLAB
    Réponses: 12
    Dernier message: 28/07/2012, 13h48
  2. [Tableaux] la fonction substr appliqué à un tableau
    Par cyprien95 dans le forum Langage
    Réponses: 1
    Dernier message: 31/12/2010, 10h17
  3. Réponses: 2
    Dernier message: 09/04/2009, 10h32
  4. Réponses: 2
    Dernier message: 07/02/2008, 10h56
  5. rechercher dans un tableau en fonction de la valeur d'une cellule
    Par jefe.k dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/06/2007, 10h04

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