2011-08-28 22 views
11

Tengo una figura con 2 parcelas en ella. Estoy tratando de guardar la figura como un png con un ancho más largo.Matlab figura de ahorro con tamaño predefinido

%%%%%%%%%%%%First%%%%%%%%%%%%%%%%%% 
a=figure('Name','First Structure'); 
load C:\Users\William\workspace\P5\FirstAdd.txt 
n=FirstAdd(:,1); 
t=FirstAdd(:,2); 
subplot(1,2,1); 
plot(n,t); 
xlabel('n'); 
ylabel('Time'); 
title('First Structure''s Add'); 
grid on 

load C:\Users\William\workspace\P5\FirstContains.txt 
n=FirstContains(:,1); 
t=FirstContains(:,2); 
subplot(1,2,2); 
plot(n,t); 
xlabel('n'); 
ylabel('Time'); 
title('First Structure''s Contains'); 
grid on 

rect=[250,250,1080,480]; 
set(a, 'OuterPosition',rect); 
print(a,'-dpng','First Structure.png'); 

En las últimas 3 líneas, configuré la ventana de figura de modo que los 2 trazados sean lo suficientemente anchos. Sin embargo, cuando trato de guardar la figura, la imagen es su tamaño predeterminado en el que las parcelas se aplastan.

¿Qué me estoy perdiendo?

+2

posible duplicado de [Impresión de una parcela en MATLAB dimensiones exactas en papel] (http://stackoverflow.com/questions/3600945/printing- a-matlab-plot-in-exact-dimensions-on-paper), [Cómo guardar figuras personalizadas en MATLAB] (http://stackoverflow.com/questions/6508233/how-to-save-custom-sized -figuras-en-matlab-cerrado) – Amro

Respuesta

12

El OuterPositionfigure property solo cambia cuando la ventana de figura está en la pantalla; no cambia cómo se imprimirá.

Matlab utiliza los PaperSize, PaperUnits, PaperPosition y similares propiedades de la figura cuando la "impresión" una figura, incluso cuando en realidad no tienen sentido, como cuando se produce un archivo de mapa de bits. (Ajustes PaperUnits-pixels sería lógico, pero que no funciona.)

El procedimiento para la obtención de un tamaño de la imagen particular, en pixeles es establecer PaperPosition a un cierto tamaño en pulgadas (u otra unidad física) y especifique la resolución deseada en puntos por pulgada usando la opción -r-print:

r = 150; % pixels per inch 
set(gcf, 'PaperUnits', 'inches', 'PaperPosition', [0 0 1080 480]/r); 
print(gcf,'-dpng',sprintf('-r%d',r), 'bar.png'); 

Algunas de estas particularidades se explican en la ayuda para la print función.

También puede probar la opción -r0 que le dice a Matlab que use la resolución de la pantalla.

4

Siguiendo el ejemplo de @ nibot, escribí la siguiente función:

function save_as_png(handle, filename, dpi, width, height); 
    set(handle, 'PaperUnits', 'inches', 'PaperPosition', [0 0 width height]/dpi); 
    print(handle, '-dpng', ['-r' num2str(dpi)], filename); 
end 
Cuestiones relacionadas