2011-08-28 2 views
11

Ho una figura con 2 grafici su di esso. Sto cercando di salvare la figura come una PNG con una larghezza maggiore.Matlab cifra di salvataggio con dimensione predefinita

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

Nelle ultime 3 righe ho impostato la finestra in modo tale che i 2 grafici siano sufficientemente ampi. Tuttavia, quando provo a salvare la figura, l'immagine è la sua dimensione predefinita in cui i grafici sono schiacciati.

Cosa mi manca?

+2

possibile duplicato di [Stampa di una trama MATLAB in dimensioni esatte su carta] (http://stackoverflow.com/questions/3600945/printing- a-matlab-plot-in-exact-dimensions-on-paper), [Come salvare figure di dimensioni personalizzate in MATLAB] (http://stackoverflow.com/questions/6508233/how-to-save-custom-sized le figure-in-mATLAB-chiuso) – Amro

risposta

12

Il OuterPositionfigure property cambia solo dove la finestra della figura è sullo schermo; non cambia come verrà stampato.

Matlab utilizza le proprietà figura PaperSize, PaperUnits, PaperPosition e simili quando "la stampa" una figura, anche quando in realtà non hanno senso, come ad esempio quando si produce un file bitmap. (Impostazioni PaperUnits di pixels sarebbe logico, ma non funziona.)

La procedura per ottenere una particolare dimensione dell'immagine in pixel è impostare PaperPosition certa dimensione in pollici (o un'altra unità fisica) e quindi specificare la risoluzione desiderata in punti per pollice utilizzando l'opzione -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'); 

Alcune di queste peculiarità sono discussi nella Guida per l'print funzione.

Si potrebbe anche provare l'opzione -r0 che indica a Matlab di utilizzare la risoluzione dello schermo.

4

Seguendo l'esempio di @ nibot, ho scritto la seguente funzione:

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