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 :

Mise en page figure MATLAB dans Word [Débutant]


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur Photonique
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Photonique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Par défaut Mise en page figure MATLAB dans Word
    Bonjour à tous,

    je vais avoir un bon nombre de figures Matlab à générer et à présenter dans un fichier word .docx (malheureusement).

    Dans l'idéal, je recherche un code me permettant de générer une figure dont la taille est déterminée par la place que j'aurais dans mon fichier word.
    Par exemple, si je souhaite mettre 2 figures côte-à-côte, il ne faut pas que ces figures dépassent environ 5cm chacune, avec les marges standards de word.
    Connaissant cette valeur (5cm), je voudrais pouvoir l'indiquer directement dans mon code.

    De plus !
    Est-il possible, en sauvegardant en vectoriel bien-sur (.emf), que les axes et leurs labels aient la taille correspondante à la taille de police du texte dans word
    avec laquelle je travaille ?

    Pour résumer, je cherche le moyen de générer une figure dont je pourrais contrôler la taille en cm, sans à avoir à me soucier de la taille des axes.
    Je ne sais pas si j'en demande un peu trop.

    Après avoir recherché sur internet, je n'ai pas trouvé d'idée qui me satisfaisait jusqu'à maintenant.
    Je suis peut être passé à côté d'un forum intéressant...

    Voici mon code de départ :
    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
    t = -10:0.01:10;
    I = .5*(1 + tanh(.5*t/1.3));
     
    set(gcf,'Color','w','Position',[250 250 450 300]);
     
    % fonction de MATHWORKS pour supprimer les marges blanches
    subaxis(1,1,1,'MR',.04,'ML',0.13,'MT',.06,'MB',0.17);    
     
    plot(t,I,'-k'); 
    axis([-10 10 0 1.1]); 
     
    xlabel('Abscisse','fontsize',20,'fontname','Calibri Light');
    ylabel('Ordonnée','fontsize',20,'fontname','Calibri Light');
    set(gca,'xticklabel',[],'yticklabel',[],'fontsize',20,'fontname','Calibri Light');
     
    print -r300 -dmeta fig.emf
    Merci pour votre aide

  2. #2
    Membre éprouvé
    Homme Profil pro
    Doctorant LNE Trappes
    Inscrit en
    Mai 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    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
    Par défaut
    La solution :

    Le code de départ qui est le même que le tien avec de simples modifications :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    t = -10:0.01:10;
    I = .5*(1 + tanh(.5*t/1.3));
     
    set(gcf,'Color','w','Position',[250 250 450 300]);
     
    courbe=plot(t,I,'-k'); 
    axis([-10 10 0 1.1]); 
     
    xlabel('Abscisse','fontsize',20,'fontname','Calibri Light','fontSize',55);
    ylabel('Ordonnée','fontsize',20,'fontname','Calibri Light','fontSize',55);
     
    set(0,'DefaultAxesFontsize', 35)
    set(gcf,'Color','w','Position',[250 250 450 300]);
    set(courbe(1),'linewidth',3);
    Tu agrandis ta figure matlab.

    Ensuite tu mets dans le même dossier que ton code Matlab cette fonction : plot2svg.zip (tu dézippes préalablement)
    Tu lances le code et t'enregistres la figure où tu veux. Ça te l'enregistre en format SVG.

    Tu télécharges ensuite Inkscape : https://inkscape.org/fr/
    Tu vas pouvoir manipuler vectoriellement ta figure Matlab dans toute sa splendeur. Tu ouvres donc ta figure enregistrée sous format SVG avec Inkscape

    Tu cliques sur le cadenas en haut, tu choisis juste à droite cm (centimètre) à la place de px (pixel)

    Tu sélectionnes ta figure et tu mets 6 cm pour la largeur (juste a gauche du cadenas)

    Puis tu vas dans l'onglet "file" tout en haut à gauche, tu cliques sur propriété du document (ou file properties si c'est en anglais), tu cliques en bas sur le plus "Resize page to content..." puis sur "resize page to drawing or selection" : ça te recadre comme il faut ta figure.

    Voici un exemple de ta figure sous format SVG : courbe format SVG.rar, après l'avoir manipulée pour qu'elle soit parfaite pour tes documents (présentation, article, etc).

    Tu retournes ensuite sur l'onglet "file" tout en haut à gauche, tu cliques sur "export Bitmap" puis sur "Export" (tu choisis le nombre de pixel pour la qualité de ta figure, 300 c'est suffisant pour éviter de surcharger ton document word).

    Tu enregistres, et tu récupères la figure sous format bitmap pour la mettre dans ton fichier Word (insertion -> image), voici le rendu : resultat word.rar

    Avec la fonction plot2svg et Inkscape tu seras un pro des présentations pour les figures Matlab !!

    Bon courage


    Paul

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur Photonique
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Photonique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Par défaut
    Bonjour,

    Merci Paul-Ceria pour tes conseils je vais regarder ca.
    Par contre j'ai peur que plot2svg ne conserve pas les textes en Latex et repasse l'interpreter de Matlab en 'Tex'.
    Je vais faire des tests et je reviendrai pour te dire ce que ca donne pour moi.

    Merci pour le temps que tu m'as accordé.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Doctorant LNE Trappes
    Inscrit en
    Mai 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    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
    Par défaut
    Oui t'inquiète pas, il conserve la police.

    Même si Inkscape ne reconnait pas la police après, tu peux tout de même modifier et manipuler le texte (seulement l'italique et le gras ne fonctionneront pas).

  5. #5
    Membre émérite
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Billets dans le blog
    1
    Par défaut
    Pour forcer l'utilisation de la police dont tu as besoin (et quelques autres paramètres) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    set(gca, 'FontUnits', 'points', ...
        'FontSize', 12, ...
        'FontName', 'Arial', ...
        'FontWeight', 'normal', ...
        'GridLineStyle', '- -', ...
        'LineWidth', 1, ...
        'MinorGridLineStyle', ':', ...
        'XMinorGrid', 'off')
    Pour forcer la taille de la figure à une dimension prédéfinie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    w=10; % cm
    h=10; % cm
     
    set(gcf, 'PaperPosition', [0 0 w h], ...
        'PaperSize', [w, h], ...
        'PaperUnits', 'centimeters')
     
    print(f, '-dpdf', 'figure_pattern_1.pdf')
    En cadeau bonus quelques autres trucs et astuces sur la manipulation des figures matlab
    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
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    close all
    clc
     
    %% figure simple dont on impose la taille totale du fichier pdf
    % Note : le print du fichier pdf est OK mais ne correspond pas à l'écran
    f = figure (1) ;
    hold off
    n = 100 ;
    plot (rand(n,1), rand(n,1), 'o')
    hold on
    plot(rand(3,1), rand(3,1), '-x')
     
    w=10; % cm
    h=10; % cm
     
    set(gcf, 'PaperPosition', [0 0 w h], ...
        'PaperSize', [w, h], ...
        'PaperUnits', 'centimeters')
     
    print(f, '-dpdf', 'figure_pattern_1.pdf')
     
    %% figure double dont on impose la taille totale du fichier pdf
    f = figure (1) ;
    hold off
    n = 100 ;
    subplot(1,2,1)
    plot (rand(n,1), rand(n,1), 'o')
    subplot(1,2,2)
    plot(rand(3,1), rand(3,1), '-x')
     
    w=10; % cm
    h=5; % cm
     
    set(gcf, 'PaperPosition', [0 0 w h], ...
        'PaperSize', [w, h], ...
        'PaperUnits', 'centimeters')
     
    print(f, '-dpdf', 'figure_pattern_2.pdf')
     
    %% figure avec modification des propriétés des axes
    % choix de la taille de la police
    f = figure (1) ;
    subplot(1,1,1)
    hold off
    n = 100 ;
    plot (rand(n,1), rand(n,1), 'o')
    hold on
    plot(rand(3,1), rand(3,1))
     
    grid on
    title ({'toto en km^2', 'ligne_i=2'}, ...
        'Color', 'r', ...
        'FontSize', 12)
     
    w=10; % cm
    h=10; % cm
     
    set(gcf, 'PaperPosition', [0 0 w h], ...
        'PaperSize', [w, h], ...
        'PaperUnits', 'centimeters')
     
    set(gca, 'FontUnits', 'points', ...
        'FontSize', 10, ...
        'FontWeight', 'normal', ...
        'GridLineStyle', '- -', ...
        'LineWidth', 1, ...
        'MinorGridLineStyle', ':', ...
        'XMinorGrid', 'on')
     
    % renverse le sens des X et des Y
    set(gca,'XDir','reverse', 'XAxisLocation', 'top')
    set(gca,'YDir','reverse', 'YAxisLocation', 'right')
     
    % change les limites
    set(gca, 'XLim', [-0.1 1.1], 'YLim', [-0.1 1.1]) 
     
    % Titres
    set(get(gca,'XLabel'),'String','axis label', ...
    'FontSize', 10)
    set(get(gca,'YLabel'),'String','axis label', ...
    'FontSize', 10)
     
    print(f, '-dpdf', 'figure_pattern_3.pdf')
     
    %% superimposition de figures multiples non alignées
    figure(1)
    hold off
     
    axes('Position',[0.1,0.1,0.7,0.7])
    contour(peaks(20))
    set(gca, 'color', 'none') ; % transparent
     
    axes('Position',[0.7,0.7,0.28,0.28])
    surf(peaks(20))
     
    %% lignes d'épaisseur différente, Latex, 
    % Note : le latex est OK dans le pdf, pas dans la figure.
    close all
    f = figure(1);
    set(gcf, 'WindowStyle', 'docked')
    plot(rand(3,1), rand(3,1), '-x', 'LineWidth', 2, 'Color', 'k')
    hold on
    plot(rand(3,1), rand(3,1), '-x', 'LineWidth', 1, 'Color', 'k')
    legend ('toto', '\alpha \beta \gamma');
     
    title('{\itAe}^{-\alpha\itt}sin\beta{\itt} \alpha<<\beta', 'FontName', 'Arial', 'FontSize', 14)
    xlabel('Time \musec.', 'FontName', 'Arial', 'FontSize', 14)
    ylabel('Amplitude', 'FontName', 'Arial', 'FontSize', 14)
     
    print(f, '-dpdf', 'figure_pattern_4.pdf')
     
    %% Texte
    f = figure(1);
    hold off
     
    t=0:pi/64:2*pi; 
    plot(t,sin(t)); 
    title('The Sine of 0 to 2\pi')
    xlabel('t = 0 to 2\pi')
    ylabel('sin(t)')
     
    text(3*pi/4,sin(3*pi/4),...
         '\leftarrow sin(t) = .707',...
         'FontSize',16)
     
    text(pi,sin(pi),'\leftarrow sin(t) = 0',...
         'FontSize',16)
     
    text(5*pi/4,sin(5*pi/4),'sin(t) = -.707\rightarrow',... 
         'HorizontalAlignment','right',...
         'FontSize',16)
     
    print(f, '-dpdf', 'figure_pattern_5.pdf')

  6. #6
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 885
    Par défaut
    petite question à ol a propos de ton script
    ca sert à quoi de faire des hold off ??

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

Discussions similaires

  1. copie de figure MATLAB dans Word
    Par bendesarts dans le forum MATLAB
    Réponses: 5
    Dernier message: 01/11/2018, 11h32
  2. Insertion rigoureuse des figures MATLAB dans Word
    Par bendesarts dans le forum MATLAB
    Réponses: 10
    Dernier message: 30/10/2014, 11h48
  3. [Spip] Problème mise en page des articles
    Par mama07 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 24/08/2007, 18h56
  4. mise en forme du code dans word
    Par minie dans le forum Word
    Réponses: 1
    Dernier message: 24/06/2007, 01h46
  5. Réponses: 3
    Dernier message: 02/05/2007, 16h27

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