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 :

Ajouter des barres d'erreur a mon histogramme [Débutant]


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Ajouter des barres d'erreur a mon histogramme
    Bonsoir tout le monde,

    Je souhaiterais ajouter des errorbar a mon bar chart. Voici la partie de mon code qui permet d'afficher mon resultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    subplot(length(dog),1,d)
    bar(mean_m')
    xlabel('month')
    ylabel('snr')
    legend(speed)
    titre=dog(d,:);
    title(['Dog ',num2str(titre)])
    hold on
    errorbar(mean_m', error','xr')
    Et vous trouverez en pièce jointe, ce que j'obtiens.
    Comment puis-je modifier mon code pour avoir une barre d'erreur exactement au-dessus de chaque colonne de mon histogramme?
    Merci pour votre aide
    Images attachées Images attachées  

  2. #2
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Avancement
    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
    subplot(length(dog),1,d)
    bar(mean_m')
    xlabel('month')
    ylabel('snr')
    legend(speed)
    titre=dog(d,:);
    title(['Dog ',num2str(titre)])
     
    hold on
    X(1,:)=0.745:11.745;
    X(2,:)=0.92:11.92;
    X(3,:)=01.1:12.1;
    X(4,:)=01.255:12.255;
    for i=1:length(speed)
    <div style="margin-left:40px">mean_m(i,:);
    error(i,:);
    X(i,:);
    errorbar(X(i,:),mean_m(i,:),error(i,:),'xr')</div>end
    Avec ce code je me rapproche un peu plus de ce que je veux, mais ce n'est pas encore ça
    Images attachées Images attachées  

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Essaie avec cette contribution : Bar Chart with Error Bars by Martina Callaghan

  4. #4
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut erreur
    Merci pour ton aide. Mais lorsque j'applique ce code, j'ai une erreur que je ne comprends pas:

    Attempted to access errors(:,2); index out of bounds because size(errors)=[6,1,1].
    
    Error in barwitherr (line 97)
        upperErrors = errors(:,2);
    
    Error in average (line 70)
        barwitherr(error',mean_m')

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Pour commencer, renomme la variable error car c'est déjà le nom d'une fonction MATLAB.

    Ensuit, il faut que les deux arguments de barwitherr aient les mêmes dimensions.

  6. #6
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    J'ai bien renomme la variable error comme tu me l'as conseille par ecart.

    Ensuit, je pensais justement que les deux arguments de barwitherr avaient les mêmes dimensions.

    voici comment je declare mes arguments:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mean_m(v,m)=nanmean(nanmean(valeursok));
    ecart(v,m)=nanstd(nanstd(valeursok));
    et voici comment j'appelle la fonction barwitherr:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    barwitherr(ecart',mean_m')

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Que renvoie ceci ?


  8. #8
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Name        Size                    Bytes         Class     Attributes
    
      ecart         1x6                48  double              
      mean_m     4x12              384  double
    Effectivement ils n'ont pas les memes dimensions. Comment puis-je corriger cela?

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Difficile de t'aider sans voir plus de code et sans savoir ce que contient valeursok

  10. #10
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Voici mon code:

    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
    clear all
    close all
    speed=['2';'3';'4';'5'];
    dog=['3196';'3197';'3198'];
    month=['01';'02';'03';'04';'05';'06';'07';'08';'09';'10';'11';'12'];
    index=0;
    dimdog=size(dog);
    counter=0;
    Cvide=zeros(1,16);
    C(1,:)=Cvide;
     
    for s_chosen=1:1:length(speed)
        for d_chosen=1:1:dimdog(1)
            for m_chosen=1:1:length(month)
                index=index+1;
                s_index=speed(s_chosen,:);
                d_index=dog(d_chosen,:);
                m_index=month(m_chosen,:);
     
                for num=0:100
                    if num == 0
                        nom=strcat(dog(d_chosen,:),'_',speed(s_chosen,:),'_',month(m_chosen,:),'.xls');
                    end
                    if num~=0
                        nom=strcat(dog(d_chosen,:),'_',speed(s_chosen,:),'_',month(m_chosen,:),'_',num2str(num),'.xls');
                    end
                    fileopen=fopen(nom);
     
                    if fileopen~=-1
                        counter=counter+1;
                        C(counter,:)=Cvide;
                        C2=xlsread(nom);
                        C(counter,:)=C2(1,:);
                        dogstudied(counter)=d_chosen;
                        speedstudied(counter)=s_chosen;
                        monthstudied(counter)=m_chosen;         
                    end   
     
                end      
                resultat(index)=1;
     
            end
        end
    end
     
    for d=1:1:dimdog(1)
        for v=1:1:length(speed)
     
            for m=1:1:length(month)
                mean_m(v,m)=0;
                indexchien=find(dogstudied==d);
                indexvitesse=find(speedstudied==v);
                indexmois=find(monthstudied==m);
                indexchienvitesse=intersect(indexchien,indexvitesse);
                indexchienmois=intersect(indexchien,indexmois);
                indexcomplet=intersect(indexchienvitesse,indexchienmois);
                valeursok=C(indexcomplet,:);
     
    %             for i=1:size(C(indexcomplet,:))
                    mean_m(v,m)=nanmean(nanmean(valeursok));
                    ecart(v,m)=nanstd(nanstd(valeursok));
    %             end 
     
            end
        end
     
        figure (1)
        subplot(length(dog),1,d)
        barwitherr(ecart',mean_m')
        xlabel('month')
        ylabel('snr')
        l=legend(speed,'Location','SouthEastOutside');
        v = get(l,'title');
        set(v,'string','Speed (mph)');
        titre=dog(d,:);
        title(['Dog ',num2str(titre)])
    Desolee, c'est un peu indigeste vu qu'il n'y a pas de commentaires.

  11. #11
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Je pense avoir trouve mon problème.
    C'est au niveau de : Mes fichiers Excel sont tous de la forme une colonne a 16 valeurs. Et lorsqu'une valeur ne me convenait pas je la remplaçait par un 0. Mais après j'avais un problème au niveau du calcul de la moyenne parce qu'il prenait en compte mais 0. Du coup, j'ai remplace mes 0 par des Nan. Et xlsread ne recopie pas tous les NaN.

    Ex:
    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
    C2 =
     
        0.8088
        0.8896
        1.1677
        0.9452
        1.2172
           NaN
        0.8755
        0.8629
        0.7310
        0.8509
        1.0383
        0.5967
        0.8303
        0.6903
           NaN
        0.5548
     
    C2 =
     
         2
         2
    Ce dernier fichier test est compose de 14 NaN et 2 données. Mais xlsread me recopie que mais 2 données.
    Du coup j'ai utilise,
    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
     [n,txt,raw] = xlsread(nom);
    C2=raw
    C2 = 
     
        'NaN'
        'NaN'
        'NaN'
        'NaN'
        'NaN'
        [2]
        [2]
        'NaN'
        'NaN'
        'NaN'
        'NaN'
        'NaN'
        'NaN'
        'NaN'
        'NaN'
        'NaN'
    Donc je récupère bien mais 16 données mais la j'ai un problème pour calculer ma moyenne vu qu C2 est de classe cell alors que C est de classe double. Et je n'ai pas trouve de fonction cell2double
    Comment je peux me dépatouiller?

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

    Une solution incluant la fonction cell2mat que tu cherchais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    isNum = cellfun(@isnumeric,C2);
    nums = nan(size(C2));
    nums(isNum) = cell2mat(C2(isNum));
    Voir

  13. #13
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Pour revenir a barwitherr
    Merci Winjerome, c'est parfait !

    Sinon pour revenir a la fonction barwitherr, j'ai une nouvelle erreur:
    Undefined function or variable "lowerErrors".
    
    Error in barwitherr (line 103)
    if any(size(values) ~= size(lowerErrors))
    
    Error in average (line 76)
        barwitherr(ecart',mean_m')

  14. #14
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 958
    Points
    52 958
    Par défaut
    Encore une fois :
    Citation Envoyé par Dut Voir le message
    Que renvoie ceci ?


  15. #15
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    whos mean_m ecart
      Name        Size            Bytes  Class     Attributes
    
      ecart       4x12              384  double              
      mean_m      4x12              384  double

  16. #16
    Invité
    Invité(e)
    Par défaut
    Que représentent ces deux variables mean_m et ecart, et que souhaites-tu tracer précisément par rapport à elles ?

    Ceci peut-être ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mean_m = rand(4,12);
    err = cat(3, ecart.', ecart.');
     
    barwitherr(err, mean_m.')
    Dernière modification par Invité ; 08/08/2013 à 20h49.

  17. #17
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    J'ai fait un petit schema pour expliquer ce que je souhaite tracer.

    Donc ma variable mean_m correspond aux colonnes bleues, vertes et rouges, c'est-a-dire a la moyenne de mes SNR en fonction du mois et de la vitesse. Et ma variable ecart correspond au "segment" bleu clair qui me permet de voir si ma moyenne est aberante ou non.

    Lorsque j'utilise la fonction barwitherr, j'obtiens ce message d'erreur:
    Undefined function or variable "lowerErrors".
    
    Error in barwitherr (line 103)
    if any(size(values) ~= size(lowerErrors))
    
    Error in average (line 76)
        barwitherr(ecart',mean_m')
    Images attachées Images attachées  

  18. #18
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Je viens d'essayer ton code et ca marche. Mais j'aimerai bien comprendre...

  19. #19
    Invité
    Invité(e)
    Par défaut
    Pour l'explication :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    err = cat(3, ecart_inferieur, ecart_superieur);
    ecart_inferieur étant la distance avec la barre de dessous, et ecart_superieur la distance avec celle du dessus.

  20. #20
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup!!!

    Et as-tu un lien pour expliquer ce que signifie le (.') que tu as utiliser apres mes variables?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Ajout des lignes de calcul dans mon rapport
    Par safine dans le forum Jasper
    Réponses: 5
    Dernier message: 11/07/2013, 16h36
  2. [Débutant] Ajouter des "Apparences" et picturebox dans mon impression de panel
    Par flodu91 dans le forum VB.NET
    Réponses: 8
    Dernier message: 27/07/2012, 09h38
  3. Affichage des messages d'erreur sur mon serveur
    Par philippe57460 dans le forum Langage
    Réponses: 4
    Dernier message: 25/06/2008, 09h23
  4. [MatplotLib] Changer la couleur des barres d'erreurs
    Par Kaeguri dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 28/03/2008, 15h57
  5. des messages d'erreurs avec mon code
    Par ulysse031 dans le forum Langage
    Réponses: 15
    Dernier message: 25/05/2007, 19h14

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