web-dev-qa-db-fra.com

Comment enregistrer un tracé dans un fichier PDF sans grande marge autour

Si j'imprime un tracé au format EPS , le contenu du fichier EPS est entièrement occupé par le tracé. Mais si j'imprime un tracé au format PDF , il y a de grandes marges au-dessus et en dessous du tracé dans le fichier PDF . Comment puis-je enregistrer un tracé dans un fichier PDF sans la grande marge autour du tracé?)

Ma conjecture est de savoir comment choisir automatiquement la bonne taille de "papier" dans un fichier PDF à imprimer, en fonction de la taille du tracé.

C'est une question que j'ai posée à tex.stackexchange.com , où j'ai obtenu des réponses qui ont surtout essayé de résoudre le problème à l'extérieur MATLAB , et je ne comprends toujours pas la seule réponse qui a essayé de résoudre depuis MATLAB. J'aimerais donc voir s'il y a plus d'opinions ici.

40
Tim

Qu'entendez-vous par "la bonne taille"? MATLAB les chiffres sont comme des graphiques vectoriels, vous pouvez donc choisir la taille que vous voulez sur votre graphique.

Vous pouvez définir la taille du papier et la position de la figure avec la fonction set.

Exemple:

plot(epx(1:5));
set(gcf, 'PaperPosition', [0 0 5 5]); %Position plot at left hand corner with width 5 and height 5.
set(gcf, 'PaperSize', [5 5]); %Set the paper to have width 5 and height 5.
saveas(gcf, 'test', 'pdf') %Save figure

Enter image description here

Le code ci-dessus supprimera la plupart des bordures, mais pas toutes. En effet, le coin gauche ([0 0] dans le vecteur position) n'est pas le "vrai" coin gauche. Pour supprimer davantage de bordures, vous pouvez ajuster les vecteurs PaperPosition et PaperSize.

Exemple:

plot(exp(1:5))
set(gcf, 'PaperPosition', [-0.5 -0.25 6 5.5]); %Position the plot further to the left and down. Extend the plot to fill entire paper.
set(gcf, 'PaperSize', [5 5]); %Keep the same paper size
saveas(gcf, 'test', 'pdf')

Enter image description here

18
Ghaul

Cela fonctionne à des fins d'affichage:

set(gca(), 'LooseInset', get(gca(), 'TightInset'));

Devrait également fonctionner pour l'impression.

10
Royi

Le dimensionnement des axes dans MATLAB peut parfois être un peu délicat. Vous avez raison de suspecter les propriétés de dimensionnement du papier comme une partie du problème. Un autre est les marges automatiques que MATLAB calcule. Heureusement, il existe des propriétés d'axes réglables qui vous permettent de contourner ces marges. Vous pouvez réinitialiser les marges pour qu'elles soient juste assez grandes pour les étiquettes d'axe en utilisant une combinaison des propriétés Position et TightInset qui sont expliquées ici . Essaye ça:

 >> h = figure; 
 >> axes; 
 >> set (h, 'InvertHardcopy', 'off'); 
 >> saveas (h , 'WithMargins.pdf'); 

et vous obtiendrez un PDF qui ressemble à: MATLAB plot with auto-margins mais maintenant faites ceci:

 >> tightInset = get (gca, 'TightInset'); 
 >> position (1) = tightInset (1); 
 >> position (2) = tightInset (2 ); 
 >> position (3) = 1 - tightInset (1) - tightInset (3); 
 >> position (4) = 1 - tightInset (2) - tightInset (4); 
 >> set (gca, 'Position', position); 
 >> saveas (h, 'WithoutMargins.pdf'); 

et vous obtiendrez: MATLAB plot with auto-margins removed

9
b3.

Le script dans Comment se débarrasser de la marge blanche dans les saveas ou les sorties d'impression de MATLAB fait ce que vous voulez.

Rendez vos limites de figure serrées:

ti = get(gca,'TightInset')
set(gca,'Position',[ti(1) ti(2) 1-ti(3)-ti(1) 1-ti(4)-ti(2)]);

... si vous faites directement des sauvegardes (ou imprimez), MATLAB ajoutera toujours l'espace blanc ennuyeux. Pour s'en débarrasser, il faut ajuster le `` format papier '':

set(gca,'units','centimeters')
pos = get(gca,'Position');
ti = get(gca,'TightInset');

set(gcf, 'PaperUnits','centimeters');
set(gcf, 'PaperSize', [pos(3)+ti(1)+ti(3) pos(4)+ti(2)+ti(4)]);
set(gcf, 'PaperPositionMode', 'manual');
set(gcf, 'PaperPosition',[0 0 pos(3)+ti(1)+ti(3) pos(4)+ti(2)+ti(4)]);
6
emrea

Il me semble que toutes les approches (solutions d'échange de fichiers non envisagées) manquent ici de l'étape essentielle, ou finalement y mènent via des solutions de contournement floues.

La taille de la figure doit être égale à la taille du papier et les marges blanches ont disparu.

A = hgload('myFigure.fig');

% set desired output size
set(A, 'Units','centimeters')
height = 15;
width = 19;

% the last two parameters of 'Position' define the figure size
set(A, 'Position',[25 5 width height],...
       'PaperSize',[width height],...
       'PaperPositionMode','auto',...
       'InvertHardcopy', 'off',...
       'Renderer','painters'...     %recommended if there are no alphamaps
   );

saveas(A,'printout','pdf')

Vous donnera une sortie pdf telle que votre figure apparaît, exactement dans la taille que vous souhaitez. Si vous voulez le rendre encore plus serré, vous pouvez combiner cette solution avec la réponse b.

4
thewaywewalk

La fonction export_fig sur l'échange de fichiers MATLAB recadrera par défaut les espaces autour d'un fichier PDF/EPS de sortie lors de l'exportation d'un figure.

4
user664303

Enregistrez au format EPS puis convertissez au format PDF:

saveas(gcf, 'nombre.eps', 'eps2c')
system('epstopdf nombre.eps') %Needs TeX Live (maybe it works with MiKTeX).

Vous aurez besoin d'un logiciel qui convertit EPS en PDF.

3
Fabian