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 :

Histogramme avec 3 axes


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Histogramme avec 3 axes
    Bonjour,

    je cherche a faire la meme chose que ce code mais en histogramme :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    x=0:0.1:4*pi;
    h=plotyy(x, sin(2*x), x, exp(x), ...
             'plot', 'semilogy');
    grid('on')
    xlabel('axe X')
    hy1=get(h(1),'ylabel');
    hy2=get(h(2),'ylabel');
    set(hy1,'string','fonction 1');
    set(hy2,'string','fonction 2');


    je souhaite avoir 3 axes. De plus, mes données seront sous cette forme :
    H0 : 73x37x247 (ici des coordonnées GPS contenant les données sur la hauteur des vagues)
    et mon t : 247x1 (le temps)

    Mon code de base qui trace un histogramme :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    filename='2016_03.nc';
     
    long=ncread(filename,'longitude');    %réccupération de la matrice des longitudes
    lat=ncread(filename,'latitude');
    H0=ncread(filename,'VHM0');
    Tp=ncread(filename,'VTPK');      %Peak period
    t=ncread(filename,'time');
     
    % h=histogram(H0,20,'Normalization','probability')


    Mon soucis c'est que je souhaite "combiner" les 2 codes afin d'avoir un histogramme avec à la fois les données normalisées pour avoir la frequence sur la hauteur des vagues et une courbe sur la frequence cumulée (0 à 100%).

    ca donnerait ca :



    Merci d'avance pour votre aide.

  2. #2
    Modérateur

    salut

    si tu as matlab 2016a ou plus, tu as la fonction yyaxis

    sinon tu peux utiliser la fonction plotyy et afficher presque rien sur le premier axe (le point 0,0 par exemple)
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    figure
    histogram(X);
    hold on
    plotyy(0,0,x,y);

  3. #3
    Futur Membre du Club
    reponse
    salut,

    Merci,

    maintenant j'ai :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    h=histogram(H0,20,'Normalization','probability')
    % S=sum(h.Values)
    figure(1)
    hold on
    plotyy(0,0,x,y);


    mais comment je remplace x et y pour avoir la courbe en rouge sur l'image plus haut avec le cumule de mes probabilité ?
    merci d'avance :

    j'ai ceci en remplacant x et y par 0 :


  4. #4
    Modérateur

    comme ca :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    % comptage sur 100 casiers
    [N,edges]  = histcounts(data,100);
     
    % valeur moyenne des casiers
    edges = (edges(1:end-1)+edges(2:end))/2
     
    % N en cumulé et pourcentage
    N = cumsum(N)/sum(N)*100;
     
    % affichage
    plotyy(0,0,edges,N)

  5. #5
    Futur Membre du Club
    Merciiiiii beaucoup pour votre aide!!

    cela fonctionne tres bien mais j'ai encore 2 petites questions,

    [N,edges] = histcounts(H0,100); pourquoi 100? sachant que je fais 20 "batons" h=histogram(H0,20,'Normalization','probability')
    et quand j'ecris 20, il y une une petite difference sur les courbes.

    Ensuite, est-il possible de connaitre la valeur sur l'axe des x correspondant à 50% sur la courbe?

    merci encore pour votre aide rapide et efficace

  6. #6
    Modérateur

    pourquoi pas 100 ?
    c'est totalement arbitraire
    par contre je pense que c'est mieux que la courbe soit plus échantillonnée que l'histogramme

    pour connaitre la valeur de x pour laquelle la probabilité est de 50, quelque chose comme interp1(N, edges, 50) devrait marcher

###raw>template_hook.ano_emploi###