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 :

taille automatique des subplots


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Par défaut taille automatique des subplots
    Bonjour,

    Pour un besoin de synthèse je modifie à la main une figure contenant 2 subplots. Leur titres étaient sur 2 ligne et je les passe en 1 seule ligne, je fais mes modifications comme je l'entends. Ça c'est cool.
    Le hic est qu'après avoir modifié le titre, je n'arrive pas à trouver un menu qui me permet de retailler les subplots automatiquement pour qu'il prenne le maximum de place sur la figure. Il y a bien une sorte de 'option "TightInset" mais je n'arrive pas à l'utiliser
    J'espère avoir pu m'exprimer assez clairement sur ce que j'aimerais faire. Si vous avez une solution (manipulation manuelle est tout aussi préférable, ormis "tu bouges tes titres, t'étires les graphs, etc...", un truc propre en fait) je suis preneur.

    Merci beaucoup.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Pourquoi ne pas laisser MATLAB redimensionner les graphiques automatiquement en modifiant les titres non pas "à la main" mais avec le code 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
    18
    19
    20
    21
    22
    function titresuruneligne(ax)
     
    error(nargchk(1,1,nargin));
     
    if ~all(ishandle(ax))
        error('AX is not a valid Axes handles vector');
    end
     
    for n = 1:numel(ax)
     
        t = get(ax(n),'title');
     
        str = get(t,'string');
     
        if ~iscell(str)
            return
        end
     
        str = strcat(str,{' '});
        set(t,'string',[str{:}]);
     
    end
    Sinon, voici un petit code rapide qui montre visuellement à quoi correspondent certaines propriétés des objets Axes :

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    close('all')
     
    for k=1:2
     
        figure(k)
     
        if k == 1
     
            s = axes;
            title({'AAAAA - BBBBB' 'CCCCC'})
            xlabel('x');
            ylabel('y');
     
        else
     
            s(1) = subplot(221);
            title({'AAAAA - BBBBB  - CCCCC'})
            xlabel('x');
            ylabel('y');
            s(2) = subplot(222);
            title({'AAAAA - BBBBB' 'CCCCC'})
            xlabel('x');
            ylabel('y');
            s(3) = subplot(223);
            title({'AAAAA' 'BBBBB - CCCCC'})
            xlabel('x');
            ylabel('y');
            s(4) = subplot(224);
            title({'AAAAA' 'BBBBB' 'CCCCC'});
            xlabel('x');
            ylabel('y');
     
        end
     
        ax = axes('units','normalized','position',[0 0 1 1],'visible','off',...
            'xlim',[0 1],'ylim',[0 1],'nextplot','add','zlim',[0 1]);
     
        for n = 1:numel(s)
     
            axes(ax)
     
            pos = get(s(n),'position');
            out = get(s(n),'outerposition');
            tig = get(s(n),'tightinset');
     
            ti = get(s(n),'title');
            xl = get(s(n),'xlabel');
            yl = get(s(n),'ylabel');
     
            extti = get(ti,'extent');
            posti = get(ti,'position');
     
            extxl = get(xl,'extent');
            posxl = get(xl,'position');
     
            extyl = get(yl,'extent');
            posyl = get(yl,'position');
     
            % Propriété Position de l'objet Axes
            r = rectangle('position',pos);
            set(r,'edgecolor','g','linewidth',3)
     
            % Propriété OuterPosition de l'objet Axes
            r = rectangle('position',out);
            set(r,'edgecolor','y','linewidth',3)
     
            % Propriété TightInset de l'objet Axes
            r = rectangle('position',pos+[-tig(1) -tig(2) tig(1)+tig(3) tig(2)+tig(4)]);
            set(r,'edgecolor','r','linewidth',3,'linestyle','-.')
     
            % Propriété Extent de l'objet Text
            % => Propriété Title de l'objet Axes
            r = rectangle('position',[extti(1)*pos(3)+pos(1) extti(2)*pos(4)+pos(2) extti(3)*pos(3) extti(4)*pos(4)]);
            set(r,'edgecolor','b','linewidth',3)
     
            % Propriété Position de l'objet Text
            % => Propriété Title de l'objet Axes
            plot(posti(1)*pos(3)+pos(1),posti(2)*pos(4)+pos(2),'mo','markerfacecolor','m')
     
            % Propriété Extent de l'objet Text
            % => Propriété XLabel de l'objet Axes
            r = rectangle('position',[extxl(1)*pos(3)+pos(1) extxl(2)*pos(4)+pos(2) extxl(3)*pos(3) extxl(4)*pos(4)]);
            set(r,'edgecolor','b','linewidth',3)
     
            % Propriété Position de l'objet Text
            % => Propriété XLabel de l'objet Axes
            plot(posxl(1)*pos(3)+pos(1),posxl(2)*pos(4)+pos(2),'mo','markerfacecolor','m')
     
            % Propriété Extent de l'objet Text
            % => Propriété YLabel de l'objet Axes
            r = rectangle('position',[extyl(1)*pos(3)+pos(1) extyl(2)*pos(4)+pos(2) extyl(3)*pos(3) extyl(4)*pos(4)]);
            set(r,'edgecolor','b','linewidth',3)
     
            % Propriété Position de l'objet Text
            % => Propriété YLabel de l'objet Axes
            plot(posyl(1)*pos(3)+pos(1),posyl(2)*pos(4)+pos(2),'mo','markerfacecolor','m')
     
        end
     
    end
    Pour l'objet Axes :


    Pour les objets Text (Title, XLable et YLabel) :
    • rectangles bleus : propriété Extent
    • point magenta : propriété Position


    A noter que les propriétés TightInset et Extent sont en lecture seule. Il est donc impossible de les modifier soi-même.

    Voila j'espère que ça sera utile
    Images attachées Images attachées   

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Par défaut
    Je vais regarder ça mais actuellement je laisse comme c'est même si ça ne rempli pas au mieux la page.
    J'aurais pensé qu'il existait une fonction Matlab pour puisque qu'on a souvent des graphes à présenter et qu'il est logique de vouloir les rendre le plus lisibles donc qu'ils prennent le plus de place.
    Merci beaucoup pour ta réponse, me^me si elle ne me permet pas de faire ce que je veux elle me permet d'avancer dans la compréhension de Matlab

Discussions similaires

  1. Taille automatique des cellules d'un report
    Par mehdi.cheddani dans le forum VB.NET
    Réponses: 8
    Dernier message: 17/04/2013, 14h13
  2. Réponses: 4
    Dernier message: 07/05/2009, 14h59
  3. [BCB5] Défilement automatique des scroll bars
    Par Christophe Brun dans le forum C++Builder
    Réponses: 2
    Dernier message: 05/12/2004, 16h59
  4. Traitement automatique des mails.
    Par ourk dans le forum Linux
    Réponses: 2
    Dernier message: 23/09/2004, 18h14
  5. Réponses: 9
    Dernier message: 29/07/2003, 14h41

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