2011-03-01 22 views
38

Si imprimo un trazado en el formato EPS, el contenido del archivo EPS está completamente ocupado con el trazado. Pero si imprimo un diagrama en el formato PDF, entonces hay grandes márgenes por encima y por debajo de la trama en el archivo PDF. ¿Cómo puedo guardar un diagrama en un archivo PDF sin el gran margen alrededor de la trama?Cómo guardar un trazado en un archivo PDF sin un gran margen alrededor de

Mi suposición es cómo elegir automáticamente el tamaño de "papel" adecuado en un archivo PDF para imprimir, de acuerdo con el tamaño de la parcela.

Esta es una pregunta que hice en tex.stackexchange.com, donde recibí respuestas que en su mayoría intentaron resolver el problema fuera de MATLAB, y todavía no entiendo la única respuesta que intentó resolver desde MATLAB. Entonces me gustaría ver si hay más opiniones aquí.

+2

Esta pregunta se responde en otro hilo: http://stackoverflow.com/questions/3801730/get-rid-of-the-white-space-around-matlab-figures-pdf-output – emrea

Respuesta

9

El tamaño de los ejes en MATLAB puede ser un poco complicado a veces. Tiene razón al sospechar que las propiedades del tamaño del papel son una parte del problema. Otro es los márgenes automáticos calculados por MATLAB. Afortunadamente, existen propiedades de ejes configurables que le permiten sortear estos márgenes. Puede restablecer los márgenes para que sean lo suficientemente grandes como para las etiquetas de eje utilizando una combinación de las propiedades Position y TightInset que se explican here. Prueba esto:

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

y obtendrá un archivo PDF que se parece a: MATLAB plot with auto-margins pero ahora hacer esto:

 
>> 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'); 

y obtendrá: MATLAB plot with auto-margins removed

+0

¿Cómo se puede establecer más pequeño márgenes para la ventana en sí y no solo para el papel? Gracias. – Royi

+0

@Drazick - Lo anterior hace esto. Primero crea los pequeños márgenes en la ventana antes de guardarlos en PDF, por lo que debería ver los pequeños márgenes en su pantalla. Eche un vistazo al enlace en la respuesta para obtener más información sobre la propiedad TightInset y el posicionamiento de los ejes en general. –

+0

¿Qué sucede si tengo más de un eje en la figura? – craq

17

Qué hacer quieres decir con "el tamaño correcto"? Las figuras MATLAB son como gráficos vectoriales, por lo que básicamente puede elegir el tamaño que desee en su trazado.

Puede establecer el tamaño del papel y la posición de la figura con la función set.

Ejemplo:

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

El código anterior eliminar la mayor parte de las fronteras, pero no todos. Esto se debe a que la esquina izquierda ([0 0] en el vector de posición) no es la esquina "verdadera" de la izquierda. Para eliminar más bordes, puede ajustar los vectores PaperPosition y PaperSize.

Ejemplo:

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

+0

¿Cómo podría establecer márgenes más pequeños para la ventana y no solo para el papel? Gracias. – Royi

10

Esto funciona para la visualización de los propósitos:

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

deben trabajar para la impresión también.

4

La función export_fig en el intercambio de archivos MATLAB recortar el espacio en blanco alrededor de un archivo de salida PDF/EPS por defecto cuando se exporta una figura.

3

Guardar a EPS y luego convertir a PDF:

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

Se necesita algo de software que convierte EPS a PDF.

-2
system ('/usr/bin/pdfcrop filename.pdf'); 
+2

Considere agregar una explicación también para ir con el código/comando. – Harry

4

Me parece que todos los enfoques (soluciones de intercambio de archivos no considerados aquí) se carece el paso esencial, o, finalmente, conduce a ella a través de algunas soluciones borrosas.

El tamaño de la figura debe ser igual al tamaño del papel y los márgenes blancos han desaparecido.

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') 

le dará una salida de PDF como aparece su figura, exactamente en el tamaño que desee. Si desea obtener aún más estricto puede combinar esta solución con la respuesta de b3.

Cuestiones relacionadas