2009-12-05 8 views
15

Io sono SSH che si collega a un server Linux e faccio qualche programmazione MATLAB. Vorrei salvare trama invisibileSalva la trama invisibile di Matlab sotto il terminale come immagine con la stessa dimensione

figH = figure('visible','off') ; 
% Plot something 
% save the plot as an image with same size as the plot 
close(figH) ; 

saveas() e print() cambierà la dimensione dell'immagine salvata diversa rispetto alla dimensione della trama. Anche per print(), tutte e tre le modalità di rendering (-opengl, -ZBuffer e -painters) non possono essere utilizzate in modalità di emulazione terminale sul server Linux. getframe() non funziona neanche. Mi chiedo come posso risolvere questi problemi? Grazie e saluti!

+0

State facendo funzionare un server X a vostra fine? – Amro

+0

senza X per il server. – Tim

risposta

15

utilizzare la seguente sequenza di comandi per la connessione e iniziare a MATLAB:

ssh -x [email protected]   # disabled X11 forwarding 
unset DISPLAY    # unset DISPLAY variable 
matlab -nodisplay   # start MATLAB without the desktop 

poi una trama semplice per illustrare:

figure, close     # must do this first, otherwise plot is empty 
plot(1:10)      # usual plotting 
print file      # save the figure as file.ps 
saveas(gcf, 'file.eps', 'eps2c') # saveas aslo works 
exit        # done 

ho provato io stesso, e funziona come previsto.


EDIT:

È sempre possibile specificare la risoluzione DPI utilizzando -r<number>, ad esempio una risoluzione molto elevata:

print -dpdf -r600 file.pdf 

noti che è possibile utilizzare -r0 per specificare la risoluzione dello schermo.

Inoltre è possibile attivare WYSIWYG stampa di figure che utilizzano la proprietà PaperPositionMode:

figure, close 
plot(1:10) 
set(gcf, 'PaperPositionMode', 'auto') 
print -deps2c -r0 file.eps 
exit 
+0

Il problema è che l'uso di saveas() o print() non mantiene le dimensioni dell'immagine salvate come quelle del grafico. – Tim

+0

non era già stato risolto in una tua domanda precedente: http://stackoverflow.com/questions/1848176/how-not-to-save-non-image-area-in-matlab-image-plot – Amro

+0

La soluzione a patto che non ci sia in realtà la modalità terminale e la trama invisibile di Matlab (l'ho accettata solo in base al fatto che funziona sulla modalità X e sulla trama visibile di Matlab). Specificamente getframe() restituirà null anche nel modo in cui hai suggerito di connetterti al server ed eseguire Matlab. – Tim

Problemi correlati