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 :

[Axes properties] calibrer les axes des abscisses de façon identique


Sujet :

MATLAB

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut [Axes properties] calibrer les axes des abscisses de façon identique
    Bonjour,

    Voilà j'aimerais tracer un pcolor, et 2 plots sur une seule figure.

    Voici comment je procède :

    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
      
    [...]
    
        %%% plot PCOLOR
        hl1 = pcolor(TimeFile,bande_freq(2:end), rms_freq_corr');
        shading flat
        ax1 = gca;
         set(ax1,'fontweight','bold','fontsize',13)
              if voieChose == 5 || voieChose == 6
            set(ax1,'xtick',[TimeFile(1):10:TimeFile(end)]);
            datetick('x', 'dd-mm-yy','keeplimits','keepticks')
     elseif voieChose == 1 || voieChose == 2 || voieChose == 3 || voieChose == 4
            set(ax1,'xtickLabel',[]);
     end
    
        
    
       %%% PLOT DATA 1
        ax2 = axes('Position',get(ax1,'Position'),'YAxisLocation','right','XAxisLocation','top','Color','none','XColor','k','YColor','k');
        hl2 = line(tempsGWC,GWCsechage,'Marker','s','Parent',ax2,'MarkerEdgeColor','w','MarkerFaceColor','k','MarkerSize',8);
        
        set(ax2,'fontweight','bold','fontsize',13,'AmbientLightColor','red')
     set(ax2,'XtickLabel',[],'xtick',[]);
         
        %%% PLOT DATA 2
        ax3= axes('Position',get(ax1,'Position')+[0.02 0 0 0.02],'YAxisLocation','right','Color','none','YColor','k');
        hl3 = line(TimeFile,VitesseFile,'Marker','O','Parent',ax3,'MarkerEdgeColor','w','MarkerFaceColor','k','MarkerSize',8);
         set(ax3,'fontweight','bold','fontsize',13)   
        set(ax3,'XtickLabel',[],'xtick',[]);
    
    [...]
    Seulement les valeurs en temps (abscisse ne coince pas vraiment, il y a un décalage). Le décalage est normal pour le 3eme plot puisque je change la position par rapport à l'axe 1 (ax1) (en rouge).

    En revanche je ne vois pas pourquoi il existerait un décalage entre le Pcolor et le plot data 1. Évidemment les datas du pcolor en temps et du plot 1 en temps commencent quasi au même moment (shift=55 secondes) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    >> datestr(TimeFile(1))
     
    ans =
     
    24-Jul-2010 14:40:55
     
    >> datestr(tempsGWC(1))
     
    ans =
     
    24-Jul-2010 14:40:00
    Ce décalage est surement expliqué car les axes 1 et 2 en abscisse ne se fondent pas et sont décalés mais j'aimerais savoir pourquoi? comment peut on les forcer a devenir identique pour n'en former qu'un seul qui servira pour toutes les courbes?

    Merci d'avance !

    Voici la figure finale ou l'on voit que les courbes, malgré que leur temps commencent au même moment que le pcolor, débutent avec un décalage.


    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

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

    As-tu vérifié que les limites de tes Axes ax1 et ax2 étaient les mêmes?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    Bonjour,

    As-tu vérifié que les limites de tes Axes ax1 et ax2 étaient les mêmes?
    Ouais, effectivement j'ai corrigé en ajoutant ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     set(ax1,'Xlim',[TimeFile(1) TimeFile(end)])
    set(ax2,'Xlim',[tempsGWC(1) tempsGWC(end)])
    et ça marche pour le pcolor et la 1ere courbe.
    En revanche je suis toujours bloqué pour la 3eme courbe.. vu que je change la position des axes, je décale tout. Y'aurait il moyen de garder la même position mais de bouger simplement l'axe des ordonnées de cette courbe afin qu'elle ne se superpose pas avec la précédente?

    Merci !!
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  4. #4
    Invité
    Invité(e)
    Par défaut
    C'est sûr qu'il n'y a pas vraiment de lien facile entre les coordonnées de ton Axes dans la figure et celles à l'intérieur...
    Si ton seul but est d'obtenir les coordonnées à droite de la 3ème courbe, je pencherais pour créer un quatrième Axes pour cela et d'aligner le 3ème sur les deux autres.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    Super ! vraiment astucieux !
    Mais comment supprimer le dernier plot (celui qui sera avec le bon axe)? car je suis obligé de le définir avec son axe pour que les valeurs soient correctes..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       ax4= axes('Position',get(ax1,'Position')+[0.02 0 0 0.02],'YAxisLocation','right','Color','none','YColor','k');
          hl4 = line(TimeFile,VitesseFile,'Marker','O','Parent',ax4,'MarkerEdgeColor','k','MarkerFaceColor',[238 59 59]/255,'MarkerSize',4);
          set(ax4,'fontweight','bold','fontsize',13)
        set(ax4,'XtickLabel',[],'xtick',[],'YColor',[238 59 59]/255);
    En gros comment supprimer ou rendre invisible hl4 ? je n'ai rien trouvé sur le net..

    Merci
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ce n'est pas tout à fait à ça que je pensais...
    1. On trace notre troisième courbe dans son Axes, qui lui est aligné avec les deux autres:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      ax3 = axes('Position',get(ax1,'Position'),...
          'Color','none',...
          'XTick',[],...
          'XLim',xlim(ax1),...
          'YTick',[]);
      hl3 = line(TimeFile,VitesseFile,...
          'Marker','O',...
          'Parent',ax3,...
          'MarkerEdgeColor','w',...
          'MarkerFaceColor','k',...
          'MarkerSize',8);
    2. On ajoute notre 4ème Axes pour afficher l'axe des ordonnées de cette 3ème courbe (Attention de le mettre à la même taille verticalement pour ne pas avoir de décalage courbe - valeurs affichées) :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      ax4= axes('Position',get(ax1,'Position')+[0.02 0 0 0],...
          'Color','none',...
          'FontWeight','bold',...
          'FontSize',13,...
          'XTick',[],...
          'XLim',xlim(ax1),...
          'YAxisLocation','right',...
          'YColor',[238 59 59]/255,...
          'YLim',Ylim(ax3));
      set(ax4,'YTick',...)

    PS: Pense à utiliser des unités normalisées

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    super merci !
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    Désolé, je de-résolve ce problème car je n'avais pas remarqué que j'avais une erreur dans les valeurs du dernier axe :

    Voici la nouvelle partie finale de mon programme donc :

    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
    %%% plot spectrogramme DATA 1
    hl1 = pcolor(TimeFile,bande_freq(2:end), rms_freq_corr');
    shading interp
    ax1 = gca;
    set(ax1,'fontweight','bold','fontsize',13)
    if voieChose == 7 || voieChose == 8
        set(ax1,'xtick',[TimeFile(1):10:TimeFile(end)]);
        datetick('x', 'dd-mm-yy','keeplimits','keepticks')
    elseif voieChose == 1 || voieChose == 2 || voieChose == 3 || voieChose == 4 || voieChose == 5 || voieChose == 6
        set(ax1,'xtickLabel',[]);
    end
    set(ax1,'Xlim',[TimeFile(1) TimeFile(end)])
    text((TimeFile(1)+(TimeFile(end)-TimeFile(1))/2)-1,2000,['chan ', num2str(voieChose)],'backgroundcolor',[185 211 238]/255,'fontweight','bold','fontsize',13)
    
    %%% plot GWC DATA 2
    ax2 = axes('Position',get(ax1,'Position'),'YAxisLocation','right','XAxisLocation','top','Color','none','XColor','k','YColor','k');
    hl2 = line(TimeFile,GWCsechage,'Marker','s','Parent',ax2,'MarkerEdgeColor','k','MarkerFaceColor',[46 139 87]/255,'MarkerSize',8);
    
    set(ax2,'fontweight','bold','fontsize',13,'AmbientLightColor','red','Linewidth',2)
    set(ax2,'XtickLabel',[],'xtick',[],'YColor',[46 139 87]/255);
    set(ax2,'Xlim',[TimeFile(1) TimeFile(end)])
    
    
    %%% plot Vitesse Vrg DATA 3
    ax3 = axes('Position',get(ax1,'Position'),...
        'Color','none',...
        'XTick',[],...
        'XLim',xlim(ax1),...
        'YTick',[]);
    hl3 = line(TimeFile,VitesseFile,...
        'Marker','O',...
        'Parent',ax3,...
        'MarkerEdgeColor','w',...
        'MarkerFaceColor','r',...
        'MarkerSize',8);
    
    %%% axe du plot 3
    ax4= axes('Position',get(ax1,'Position')+[0.02 0 0 0],...
        'Color','none',...
        'FontWeight','bold',...
        'FontSize',13,...
        'XTick',[],...
        'XLim',xlim(ax1),...
        'YAxisLocation','right',...
        'YColor',[238 59 59]/255,...
        'YLim',Ylim(ax3));
    voici le résultat :

    http://nsa28.casimages.com/img/2011/...3338213558.jpg

    A Première vu ok, sauf que pour le dernier plot si on regarde la dernière valeur des data :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    VitesseFile(end)
     
    ans =
     
      116.3235
    Alors que par rapport à l'échelle on est à 150 .....

    Une idée? je suis un peu perdue. Car j'ai réalisé un exemple simple et ça marche très bien. Mais je vois pas ce que j'ai pu ajouter qui fait tout merder.

    Merci d'avance

    PS : Voici le code simple et qui marche bien pour info..:

    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
    clear all
    close all
    X=[datenum(2011,1,1,0,0,0),datenum(2011,1,2,0,0,0)...
        datenum(2011,1,3,0,0,0), datenum(2011,1,4,0,0,0)] ;
    Y=[10:10:30]';
    C=[1 4 6 3 ; 84 74 69 99 ; 145 156 167 146];
     
    Y2=[23 18 12 3] ;
     
    V3 = [20 50 73 126] ;
     
    hl1 = pcolor(X,Y,C)%X= 1*m ;Y= 1*n;C n*m
    shading interp
     
    title('pcolor')
    ax1 = gca;
    set(ax1,'xtick',[X(1):X(end)]);
    datetick('x', 'dd-mm-yy','keeplimits','keepticks')
    set(ax1,'Xlim',[X(1) X(end)])
     
    %%% plot Y2
    ax2 = axes('Position',get(ax1,'Position'),'YAxisLocation','right','XAxisLocation','top','Color','none','XColor','k','YColor','k');
    hl2 = line(X,Y2,'Marker','s','Parent',ax2,'MarkerEdgeColor','k','MarkerFaceColor',[46 139 87]/255,'MarkerSize',8);
     
    set(ax2,'fontweight','bold','fontsize',13,'AmbientLightColor','red','Linewidth',2)
    set(ax2,'XtickLabel',[],'xtick',[],'YColor',[46 139 87]/255);
    set(ax2,'Xlim',[X(1) X(end)])
     
     
    %%% plot V3
    ax3 = axes('Position',get(ax1,'Position'),...
        'Color','none',...
        'XTick',[],...
        'XLim',xlim(ax1),...
        'YTick',[]);
    hl3 = line(X,V3,...
        'Marker','O',...
        'Parent',ax3,...
        'MarkerEdgeColor','w',...
        'MarkerFaceColor','k',...
        'MarkerSize',8);
     
    %%%
    aax4= axes('Position',get(ax1,'Position')+[0.02 0 0 0],...
        'Color','none',...
        'FontWeight','bold',...
        'FontSize',13,...
        'XTick',[],...
        'XLim',xlim(ax1),...
        'YAxisLocation','right',...
        'YColor',[238 59 59]/255,...
        'YLim',Ylim(ax3));
    mais je vois pas de différence fondamentale..
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

Discussions similaires

  1. comment calibrer les axes du joystick
    Par amlil-cs dans le forum Unity
    Réponses: 9
    Dernier message: 30/08/2017, 08h46
  2. Réponses: 7
    Dernier message: 20/05/2013, 16h13
  3. Réponses: 7
    Dernier message: 19/04/2012, 11h38
  4. Réponses: 1
    Dernier message: 14/06/2007, 21h37
  5. Comment dééfinir les valeurs des abscisses en Time ?
    Par marsupilami34 dans le forum Langage
    Réponses: 1
    Dernier message: 29/09/2005, 15h50

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