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 :

Enregistrer une matrice sous la forme d'un tableau (avec mise en forme ) à insérer dans un document [Débutant]


Sujet :

MATLAB

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Points : 49
    Points
    49
    Par défaut Enregistrer une matrice sous la forme d'un tableau (avec mise en forme ) à insérer dans un document
    Bonjour à tous !

    J'ai la matrice M suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    M = [4.931,0.037 ; 13.791,1.551 ; 4.702,0.137]
    J'ai une autre matrice R :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    R = [11,22 ; 4,9 ; 36,64]
    J'aimerais l'avoir sous la forme d'un tableau qui je pourrais faire avec Excel ou directement dans Word. Je vous joins un exemple de l'illustration que je voudrais savoir faire :
    Nom : Exemple.PNG
Affichages : 615
Taille : 61,8 Ko
    Je pensais utiliser SUBPLOT pour mettre a gauche mon tableau et à droite le graphe.
    Mais mon gros problème c'est le tableau avec les valeurs de M en noir (ceci n'est qu'un exemple ...) et de R en rouge avec les mêmes valeurs autour du tableau ...

    Mais je n'ai pas trouvé comment faire.

    Je viens de consulter cette discussion :
    http://www.developpez.net/forums/d66...-format-image/

    La personne qui a ouvert ce post voulait faire une grille de sudoku ...
    J'ai donc essayé d'adapté un code qu'on lui a proposé :
    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
     
    G=[3 0 0 2 5 8 6 0 0 ; 8 7 5 1 6 9 3 4 2 ; 2 0 0 4 3 7 5 1 8;
        6 8 3 5 0 0 9 7 4 ; 0 2 1 9 7 4 8 3 0 ; 0 0 0 0 0 0 0 0 0 ;
        4 5 8 0 0 0 0 2 9 ; 9 3 7 8 0 0 1 6 5 ; 1 0 0 0 9 5 4 8 3 ];
     
    S = size(G);
     
    [r,c] = meshgrid(1:S(2),1:S(1));
     
    figure
    text(r(:)-.5,c(:)-.5,num2str(G(:),'%d'),'hor','center','vert','middle')
    set(gca,'xlim',[0 S(2)],'ylim',[0 S(1)],'ydir','reverse',...
        'xgrid','on','ygrid','on','gridlinestyle','-','dataaspectratio',[1 1 1],...
        'xticklabel','','yticklabel','','box','on')
     
    f = getframe(gca);
    img = frame2im(f);
    imwrite(img,'test.bmp','bmp')
    Mais je n'y suis pas arrivé.
    Le mieux que j'ai réussi à faire c'est :
    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
     
    M = [4.931,0.037 ; 13.791,1.551 ; 4.702,0.137];
     
    S = size(M);
     
    [r,c] = meshgrid(1:S(2),1:S(1));
     
    figure
    text(r(:)-.5,c(:)-.5,num2str(M(:),'%12.2f'),'hor','center','vert','middle')
    set(gca,'xlim',[0 2],'ylim',[0 3],'ydir','reverse',...
        'xgrid','on','ygrid','on','gridlinestyle','-','dataaspectratio',[0.1 1 1],...
        'xticklabel','','yticklabel','','box','on')
     
    f = getframe(gca);
    img = frame2im(f);
    imwrite(img,'test.bmp','bmp')
    Pas top ...

    Si vous avez des idées ...
    Merci d'avance !!

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

    En utilisant les fonctionnalités de l'interpréteur TeX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    text(r(:)-.5,c(:)-.5, num2str([M(:) R(:)],'%.1f%% \n \\color{red}%.1f%%'),...
        'hor','center','vert','middle')

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Points : 49
    Points
    49
    Par défaut
    Merci Winjerome.

    Le texte en rouge correspond à ce dont j'ai besoin.

    Mais je n'arrive toujours pas à :
    - Avoir un tableau (par tableau j'entends ceux qu'on trace à la règle sur un cahier ou avec excel ...) ayant les même dimensions que les matrices utilisées (M et R ont les mêmes dimansions)
    - Avoir les valeurs inscrites au centre des cases du tableau (je crois que ce problème est lié au précedent)
    - Ecrire les valeurs autour du tableau comme dans mon exemple.

    Je continu de chercher ...

    Nom : Exemple.PNG
Affichages : 656
Taille : 32,3 Ko

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Points : 49
    Points
    49
    Par défaut
    Re-Bonjour à tous,

    J'ai (enfin) terminé la réalisation de mon histogramme, étiquettes inclues.
    J'ai enregistrée cette figure au format .png

    Nom : ProbOccDebP1.png
Affichages : 607
Taille : 10,3 Ko

    Mais je bloque toujours pour mettre en forme mon tableau ...

    1) Comment obtenir autant de cases que de valeurs dans matrice ?
    2) Comment ajouter des valeurs autour de ma matrice ?

    Je bloque complètement. Quelqu'un a-t'il une idée ?

    Merci d'avance ...

  5. #5
    Invité
    Invité(e)
    Par défaut
    En combinant les fonctions meshgrid + plot. Tu peux t'inspirer de ce message

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Points : 49
    Points
    49
    Par défaut
    Avec PLOT je ne sais comment faire. J'ai donc utilisé LINE ce qui doit revenir à peu près au même. Mais je ne sais pas utiliser MESHGRID. je comprends que cette fonction permet d'obtenir les indices identifiant les valeurs de ma matrice ... mais je n'arrive pas à l'utiliser.


    Voilà ma solution 'système D' :
    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
     
    M = [11,12 ; 21,22 ; 31,32];
    R = [13,14 ; 23,24 ; 33,34];
     
    S = size(M);
     
    figure
    hold on
     
    for x = 1:3
        Ymin = 1;
        Ymax = 4;
    line([x x],[Ymin Ymax],'linewidth',3)
    end
     
    for y = 1:4
        Xmin = 1;
        Xmax = 3;
    line([Xmin Xmax],[y y],'linewidth',3)
    end
     
    for x = 1:3
        for y = 1:2
            Mtxt = num2str(M(x,y))
            text(y+.5, x+.5, Mtxt)
    set(gca,'Visible', 'off','xlim',[0.5 3.5],'ylim',[0.5 4.5], 'ydir', 'reverse','xticklabel','','yticklabel','')
        end
    end
     
    saveas(gcf,'test','png')
    Et voilà pour commencer ...
    Je n'ai utilisé que M, il faut que j'essaye d'ajouter R. Je met le script quand c'est fait.

    Mais qui peut m'aider à ajouter les valeurs autour du tableau ?
    Est-ce que juste en créant une matrice avec mes valeurs à droite du tableau, une avec les valeurs en dessous du tableau et la fonction TEXT ça peut marcher ?



    Je prends toutes les idées
    Images attachées Images attachées  

  7. #7
    Invité
    Invité(e)
    Par défaut
    plot ou line c'est sensiblement la même utilisation

    meshgrid génère les valeurs de la grille. Il suffit de lui fournir les valeurs x et y des points d'intersection. Applique simplement le code de mon lien, et n'hésite pas à l'exécuter et étudier son contenu pour commencer.

  8. #8
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Points : 49
    Points
    49
    Par défaut
    Oui, c'est ce que j'ai fait.

    J'ai encore un peu de mal à visualiser comment Matlab traite l'information mais ça viendra ...

    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
     
    M = [11,12 ; 21,22 ; 31,32];
    R = [13,14 ; 23,24 ; 33,34];
     
    S = size(M);
     
    figure
    hold on
     
    for x = 1:3
        Ymin = 1;
        Ymax = 4;
    line([x x],[Ymin Ymax],'linewidth',3)
    end
     
    for y = 1:4
        Xmin = 1;
        Xmax = 3;
    line([Xmin Xmax],[y y],'linewidth',3)
    end
     
    [X,Y] = meshgrid(2:S(2)+1,2:S(1)+1);
     
    text(X(:)-.5,Y(:)-.5, num2str([M(:) R(:)],'%.1f%%\n \\color{red}%.1f%%'),...
            'hor','center','vert','middle');    
     
     
    set(gca,'Visible', 'off','xlim',[0.5 3.5],'ylim',[0.5 4.5], 'ydir', ...
            'reverse','xticklabel','','yticklabel','')
     
    saveas(gcf,'test','png')
    Maintenant je vais essayer de rajouter les info autour du tableau.

  9. #9
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Points : 49
    Points
    49
    Par défaut
    Voilà pour mon tableau.

    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
     
     
    M = [11,12 ; 21,22 ; 31,32];
    R = [13,14 ; 23,24 ; 33,34];
    D = [360;275;265;180]
    H = [1.5;2.5]
     
    S = size(M);
     
    figure
    hold on
     
    for x = 1:3
        Ymin = 1;
        Ymax = 4;
    line([x x],[Ymin Ymax],'linewidth',3)
    end
     
    for y = 1:4
        Xmin = 1;
        Xmax = 3;
    line([Xmin Xmax],[y y],'linewidth',3)
    end
     
    %% Valeurs tableau
    [X,Y] = meshgrid(2:S(2)+1,2:S(1)+1);
     
    text(X(:)-.5,Y(:)-.5, num2str([M(:) R(:)],'%.1f%%\n \\color{red}%.1f%%'),...
            'hor','center','vert','middle');    
     
    %% Légende à droite du tableau
    [X,Y] = meshgrid(3.2,1:S(1)+1);
     
    text(X(:),Y(:), num2str(D(:),'%.0f°%'),...
            'hor','center','vert','middle');    
     
    %% Légende en bas du tableau
    [X,Y] = meshgrid(1.5:S(2)+.5,4.2);
     
    text(X(:),Y(:), num2str(H(:),'%.0f m%'),...
            'hor','center','vert','middle');    
     
     
    set(gca,'Visible', 'off','xlim',[.5 S(2)+1.5],'ylim',[.5 S(1)+1.5], 'ydir', ...
            'reverse','xticklabel','','yticklabel','')
     
     
    saveas(gcf,'test','png')
    Ca à l'air de fonctionner, sauf que j'ai un "Warning" :

    Warning: Invalid format. 
    > In num2str>cellPrintf at 170
      In num2str at 117
      In Exemple at 33 
    Warning: Invalid format. 
    > In num2str>cellPrintf at 170
      In num2str at 117
      In Exemple at 39 
    
    Je ne sais pas ce que je dois corriger aux lignes 33 et 39 ...
    Est-ce que tu vois où est le problème ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Comme dans mon code, pense à doubler les % lorsque tu souhaites en faire un, sinon cela représente le début d'une valeur à représenter, et comme il n'y a rien qui suit, MATLAB n'est pas content.

  11. #11
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2014
    Messages : 74
    Points : 49
    Points
    49
    Par défaut
    Je croyais que '%' permettait d'afficher une lettre ou un symbole après une valeur ...
    °% --> °
    m%--> m ...

    Merci pour la correction !!!
    A bientôt !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modifier la mise en forme d'un tableau avec une macro
    Par Wouittone dans le forum VBA Word
    Réponses: 3
    Dernier message: 22/07/2013, 09h02
  2. [XL-2003] tableau avec mise en forme coller dans autre feuil
    Par antoine2933 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/07/2011, 17h47
  3. Mise en forme d'un tableau avec JSF
    Par Seb19 dans le forum JSF
    Réponses: 1
    Dernier message: 21/10/2010, 13h50
  4. enregistrer une matrice .mfcc sous matlab
    Par wafaa2009 dans le forum Signal
    Réponses: 10
    Dernier message: 22/05/2009, 15h48
  5. Mettre une matrice sous forme d'une colonne unique
    Par mfontan dans le forum MATLAB
    Réponses: 2
    Dernier message: 26/09/2008, 14h32

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