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 :

Questionnement Histogramme


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Ingénier Etude
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénier Etude
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Questionnement Histogramme
    Bonjour,
    Je me permets de venir vous poser quelques questions quand au problème que je rencontre.
    Je dispose d'un nombre importants de jeu de données qu'il faudrait que je traite sous la forme d'histogramme, j'ai eu beau remuer tout ça sous excel, c'est un peu la croix et la bannière. Je me suis alors dis que peut-être Matlab pourrait solutionner ce problème (je ne connais pas du tout).

    Je m'explique.

    J'ai plusieurs fichiers excel avec la même architecture :

    A    B    C    D    E
    1    1    1    1    1 
    ..   ..   ..   ..   ..
    ..   ..   ..   ..   ..
    Mon but est de créer pour chaque colonne un histogramme (si possible en proportion en Y et log en X; en bornant ces deux axes).
    Il faut au final des jeux de données et des fichiers excels, les histogrammes soient "identiques". Même nombre de bins, et classes constantes.

    Je ne me suis pas encore vraiment lancé dans Matlab, j'ai juste essayé d'importer mes données et réaliser quelques histogrammes.

    Mais avant de pousser plus loin, mes besoins sont-ils réalisables pour quelqu'un qui débute ? Et est-ce automatisable ? (j'ai énormément de fichiers de données)

    Merci d'avance

  2. #2
    Nouveau Candidat au Club
    Femme Profil pro
    Ingénier Etude
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénier Etude
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Pour amener un peu d'eau à mon moulin, voilà plus concrètement mon soucis.
    J'aimerais que mes bins de mon histo soient "découpés" selon une échelle log.
    Actuellement sur Matlab, si je crée un histogramme et que je passe ensuite l'axe x en log, je n'obtiens pas ce que je veux.

    Exemple :
    Histogramme classe : hist(data, nb de bins)

    Nom : Histo_normal[1].jpg
Affichages : 434
Taille : 19,1 Ko
    Le résultat est satisfaisant, mais ma donnée se rapprochant du distri lognormal, je voudrais que l'échelle et l'agencement des bins soient adaptés. Or quand je change l'échelle en log ...
    Nom : Histo_log[1].jpg
Affichages : 388
Taille : 16,9 Ko

    Il faudrait plutôt un découpage des bins en sachant que l'on va travailler en log, pour avoir quelque chose comme ceci :
    Nom : Histo_Log_W.jpg
Affichages : 383
Taille : 85,5 Ko


    Si vous avez des pistes, je suis tout ouïe.
    Merci
    Images attachées Images attachées  

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Ingénier Etude
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénier Etude
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Bon, après avoir tout essayé, la solution était là sous mes yeux, mais je n'y ai même pas pensé ...
    J'ai donc essayé, hist(log(data)); et j'ai ce que je voulais !

    Mon seul soucis reste maintenant à faire correspondre mon label en X à des valeurs logs qui commenceraient à 0,1 pour finir 1000.

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Ingénier Etude
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénier Etude
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    J'ai beau essayé tout ce que je trouve sur les forums ou sur le net, je n'y arrive pas.

    Voilà ou j'en suis après la commande : hist(log(data))

    Nom : untitled.png
Affichages : 429
Taille : 3,0 Ko

    Il faudrait juste que j'arrive à faire correspondre cette échelle en X à une échelle log avec pour borne : 0,1 et 1000.

    Si vous avez des idées ?

    Merci

  5. #5
    Membre habitué
    Homme Profil pro
    Doctorant LNE Trappes
    Inscrit en
    Mai 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Doctorant LNE Trappes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 64
    Points : 174
    Points
    174
    Par défaut
    Ça donne quelque chose si tu fais : hist(log(data),[0.1:0.1:1000]) ? J'imagine que ça donne juste un intervalle d'affichage ...

    Si jamais fais un save temp.mat après ton code pour qu'on puisse manipuler tes données.

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Points : 242
    Points
    242
    Par défaut
    Salut,

    regarde du coté des propriétés xtick et xticklabel.

    petit exemple issu de la documentation Matlab de la fonction plot

    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
     
    x = -pi:.1:pi;
    y = sin(x);
     
    %basique
    figure(1)
    plot(x,y)
     
    %modifié
    figure(2)
    plot(x,y)
    set(gca,'XTick',-pi:pi/2:pi)
    set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'})
    title('Sine Function');
    xlabel('Radians');
    ylabel('Function Value');

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Ingénier Etude
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénier Etude
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci à vous d'avoir pris le temps de répondre à mon problème.
    Paul, j'ai essayé ta solution, mais le résultat n'est pas celui escompté.
    Je me retrouve avec un histo bien moche :'(

    Nom : Paul_Solution.png
Affichages : 300
Taille : 2,5 Ko

    Dombrai, j'avais plus ou moins au fil de mes recherches essayé de modifier les ticks "manuellement", mais je ne sais pas exactement comment sont découpées les classes sur mon log expo : /


    J'ai essayé d'exporté mon espace de travail, je ne sais pas si c'est ce que tu demandais Paul.
    Je joins le fichier à la discussion.

    Merci à vous

    Data.7z

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur en analyse décisionnelle
    Inscrit en
    Juin 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur en analyse décisionnelle

    Informations forums :
    Inscription : Juin 2013
    Messages : 113
    Points : 133
    Points
    133
    Par défaut
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    data = 10.^randn(1,1000);
    hist(log10(data),100);
    set(gca,'XTickLabel',10.^str2num(get(gca,'XTickLabel')));

  9. #9
    Nouveau Candidat au Club
    Femme Profil pro
    Ingénier Etude
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénier Etude
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Super !!
    Merci beaucoup !!! Génial !!

    Me reste à plancher sur l'automatisation de l'export, mais tu me sors une grosse épine du pied !
    Au top !

  10. #10
    Nouveau Candidat au Club
    Femme Profil pro
    Ingénier Etude
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénier Etude
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Salut,

    Je suis confronté à un autre problème.
    La finalité de mon travail, est de pouvoir produire autant d'histo que j'ai de jeu de données. Il faut qu'ils soient "identiques" afin de pouvoir les superposer dans d'éventuelles présentations pour les comparer.
    Ils doivent donc être bornés en x et y. Il faut aussi que je normalise mon axe en Y vu que certaines on plus de données que d'autres. Il faudrait que je travaille avec un histogramme de proportion et pas de fréquence.

    Pour se faire, j'ai utilisé les lignes suivantes que j'ai trouvé sur le net :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    x=log(ACBZ);
    numberOfBins = 40;
    [counts, binValues] = hist(x, numberOfBins);
     
    normalizedCounts = 100 * counts / sum(counts);
    a=bar(binValues, normalizedCounts, 'barwidth', 1);
    xlabel('Input Value');
    ylabel('Normalized Count [%]');
    Mon histo est alors bien en proportion, mais lorsque j'utilise la commande donnée plus haut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(gca,'XTickLabel',10.^str2num(get(gca,'XTickLabel')));
    L'axe des X est incorrect

    Auriez-vous une idée ?

    Merci

  11. #11
    Membre habitué
    Homme Profil pro
    Ingénieur en analyse décisionnelle
    Inscrit en
    Juin 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur en analyse décisionnelle

    Informations forums :
    Inscription : Juin 2013
    Messages : 113
    Points : 133
    Points
    133
    Par défaut
    J'ai utilisé un logarithme décimal (base 10), tu as codé un logarithme naturel (base népérienne e).

    Corrige à l'un ou l'autre des endroits en remplaçant soit x=log(ACBZ); par x=log10(ACBZ); pour une base décimale, ou bien set(gca,'XTickLabel',10.^str2num(get(gca,'XTickLabel'))); par set(gca,'XTickLabel',exp(str2num(get(gca,'XTickLabel')))); pour une base népérienne.

  12. #12
    Nouveau Candidat au Club
    Femme Profil pro
    Ingénier Etude
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénier Etude
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Super merci beaucoup.
    De suite quand on travaille dans la même base, ça marche mieux
    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
    clc;
    
    fig = figure;
    
    q='SIS X';    %Nom abscisse 
    r='Variogramme 3x3x0,3 - Upscaling x125 - Proportion A=33% B=33% C=33%'; %Titre
    x=log10(SISX); %Hist de ma donnée
    numberOfBins = 40;
    [counts, binValues] = hist(x, numberOfBins);
    
    normalizedCounts = 100 * counts / sum(counts);
    a=bar(binValues, normalizedCounts, 'barwidth', 1);
    
    xlabel(q);
    title(r,'FontAngle','italic','FontSize',12.5);
    ylabel('Normalized Count [%]');
    ylim([0 20]);
    xlim([0.1 3]);
    set(gca,'XTickLabel',10.^str2num(get(gca,'XTickLabel')));
    
    
    h = findobj(gca,'Type','patch');
    
    set(h,'FaceColor',[0.1 0 0.9],'EdgeColor','w'); %Couleur de l'histo
    
    set(gca, 'Color', 'none');% Couleur de fond
    
    set(fig, 'units', 'inches', 'position', [ 5 5 15 10]); %Dimension fenêtre de sortie
    
    export_fig 'Images\x125\Vario 3303\SISX.png' -transparent -m1; %Export de mon image
    Voilà mon code final.
    En tant que débutant, on doit pouvoir faire certainement mieux, mais pour l'instant ça marche.
    Est-ce possible de ne renseigner qu'une seule fois dans mon script ma donnée. Et de l'appeler ensuite en tant que donnée, ou bien en tant que caractère à afficher ?(voir texte en rouge)

    Et une dernière question. Au vu du nombre d'histo que je vais faire, en fonction de la donnée traiter, il faut que je garde une cohérence en terme de couleur entre eux. Et surtout que la couleur soit différente pour chaque histo.
    Or de ce que j'ai lu, facecolor en RGB ne permet d'avoir que 8 couleurs, donc vraiment pas terrible pour ce que je dois faire.
    J'ai trouvé ceci : ColorBrewer, mais je ne comprends pas, ou tout du moins n'arrive pas à l'utiliser.

    Si certains d'entre vous ont des idées.

    Merci d'avance

  13. #13
    Nouveau Candidat au Club
    Femme Profil pro
    Ingénier Etude
    Inscrit en
    Mai 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénier Etude
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Voilà le rendu que j'ai après avoir superposé plusieurs png d'histo que j'ai crée avec matlab.

    Nom : Rendu_asuppri.jpg
Affichages : 395
Taille : 133,2 Ko
    Gros soucis, les bins n'ont pas la même dimension.
    J'ai cru qu'en bornant le graphe, les bins le seraient aussi, mais apparament non.
    Quelqu'un pourrait m'expliquer comment je peux borner mes bins ? Que peu importe le range de données, mes histo soient créés à partir de bins identiques.

    Thx

  14. #14
    Membre habitué
    Homme Profil pro
    Ingénieur en analyse décisionnelle
    Inscrit en
    Juin 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur en analyse décisionnelle

    Informations forums :
    Inscription : Juin 2013
    Messages : 113
    Points : 133
    Points
    133
    Par défaut
    Essaie ceci en remplaçant aux endroits appropriés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ...
    numberOfBins = 40;
    xmin = 0.1;
    xmax = 3;
    bins = linspace(xmin,xmax,numberOfBins);
    [counts, binValues] = hist(x, bins);
    ...
    xlim([xmin-(bins(2)-bins(1))/2,xmax+(bins(end)-bins(end-1))/2]);

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/01/2005, 10h53
  2. [CR8.5] Graphique : comment mélanger histogramme et ligne ?
    Par kiki26 dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 18/01/2005, 15h28
  3. TChart et histogramme
    Par coucoucmoi dans le forum Composants VCL
    Réponses: 8
    Dernier message: 30/08/2004, 16h10
  4. Questions sur chartfx (histogramme)
    Par lejert dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/01/2004, 13h54
  5. [TChart] comment remplir un histogramme avec du rouge strié.
    Par :GREG: dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2002, 09h37

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