2009-12-05 5 views
15

Ich bin SSH Verbindung zu einem Linux-Server und einige MATLAB-Programmierung tun. Ich mag unsichtbare Handlung alsSpeichern Sie Matlab unsichtbare Plot unter Terminal als ein Bild mit der gleichen Größe

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

saveas() und print() sparen wird die Größe des gespeicherten Bildes anders als die Größe des Grundstücks ändern. Auch für print() können alle drei Renderer-Modi (-opengl, -ZBuffer und -painters) nicht im Terminalemulationsmodus auf dem Linux-Server verwendet werden. getframe() funktioniert auch nicht. Ich frage mich, wie ich diese Probleme lösen kann? Danke und Grüße!

+0

werden Sie einen X-Server an Ihrem Ende laufen? – Amro

+0

kein X für den Server. – Tim

Antwort

15

Verwenden Sie die folgende Sequenz von Befehlen MATLAB zu verbinden und starten:

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

dann eine einfache Handlung zu illustrieren:

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 

ich es selbst gerade versucht, und es funktioniert wie erwartet.


EDIT:

Sie können jederzeit die DPI-Auflösung angeben -r<number>, beispielsweise eine sehr hohe Auflösung:

print -dpdf -r600 file.pdf 

Beachten Sie, dass Sie -r0 verwenden können Bildschirmauflösung festlegen.

Sie können auch einschalten WYSIWYG-Druck von Zahlen mit der PaperPositionMode Eigenschaft:

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

Das Problem besteht darin, dass die gespeicherte Bildgröße bei Verwendung von saveas() oder print() nicht wie beim Plot beibehalten wird. – Tim

+0

wurde nicht schon in einer vorherigen Frage von Ihnen angesprochen: http://StackOverflow.com/Questions/1848176/how-not-to-save-non-image-area-in-matlab-image-plot – Amro

+0

Die Lösung vorausgesetzt, es gibt eigentlich nicht für Terminal-Modus und Matlab unsichtbare Plot (ich akzeptierte es nur basierend darauf, dass es im X-Modus und Matlab sichtbaren Plot funktioniert). Speziell wird getframe() auch dann Null zurückgeben, wenn Sie die Verbindung mit dem Server vorgeschlagen und Matlab ausgeführt haben. – Tim