2009-12-05 4 views
15

Je suis un SSH qui se connecte à un serveur Linux et fait de la programmation MATLAB. Je voudrais sauver complot invisibleEnregistrer le tracé invisible Matlab sous le terminal en tant qu'image avec la même taille

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

saveas() et print() va changer la taille de l'image enregistrée différente de la taille de la parcelle. Aussi pour print(), les trois modes de rendu (-opengl, -ZBuffer et -painters) ne peuvent pas être utilisés en mode d'émulation de terminal sur le serveur Linux. getframe() ne fonctionne pas non plus. Je me demande comment je peux résoudre ces problèmes? Merci et salutations!

+0

Courez-vous un serveur X à votre fin? – Amro

+0

non X pour le serveur. – Tim

Répondre

15

Utilisez la séquence suivante de commandes pour se connecter et commencer à Matlab:

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

alors une intrigue simple pour illustrer:

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 

Je viens d'essayer moi-même, et il fonctionne comme prévu.


EDIT:

Vous pouvez toujours spécifier la résolution DPI en utilisant -r<number>, par exemple une très haute résolution:

print -dpdf -r600 file.pdf 

Notez que vous pouvez utiliser -r0 pour spécifier la résolution de l'écran.

vous pouvez également activer l'impression WYSIWYG des chiffres en utilisant la propriété PaperPositionMode:

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

Le problème est que l'utilisation de saveas() ou print() ne conserve pas la même taille d'image que le tracé. – Tim

+0

n'a pas été déjà abordé dans une précédente question de la vôtre: http://stackoverflow.com/questions/1848176/how-not-to-save-non-image-area-in-matlab-image-plot – Amro

+0

La solution à condition qu'il n'y ait réellement pas de mode terminal et de tracé invisible Matlab (je l'ai accepté uniquement en fonction du fait qu'il fonctionne sur le mode X et le tracé visible Matlab). Plus précisément, getframe() renverra null même si vous avez suggéré de vous connecter au serveur et d'exécuter Matlab. – Tim

Questions connexes