使用-nodesktop选项时,Matlab绘制的分辨率非常低

时间:2014-01-31 08:05:12

标签: matlab crontab resolution

当使用-nodesktop选项通过cronjob运行函数时,我在解决matlab图时遇到问题。该函数绘制并保存(使用打印功能)一些数字。从matlab桌面运行时,它们根据指定的分辨率进行绘图和保存,没有任何问题。但是当通过带有-nodesktop选项的cronjob运行时,分辨率非常差(低)。

这基本上就是我目前正在做的事情:

fh = figure;

set(fh,'Position',[0 0 1360 470]);

plot(somedata);

print(fh,'-dpng',figpath,'-painters');

请注意,我也尝试过指定打印分辨率:

print(fh,'-dpng',figpath,'-r300');

但这最终会导致文件损坏。我不知道为什么。我正在使用-painters,因为我在某处读到如果情节有点复杂,它可以默认为opengl,这会破坏打印但这似乎不是问题(有或没有选项,情节是一样的。)

我也试过了:

set(fh,'PaperPositionMode','auto')

并没有解决问题。

cronjob运行以下命令:

/usr/local/bin/matlab -nodesktop -r "startup; perform_plots; exit"

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

我想出了这个问题。

通过运行matlab作为cronjob,未设置DISPLAY环境变量。因此,没有X显示器可供matlab使用。我不知道它是如何设法绘制任何东西的,但是确实如此,并且分辨率非常低。

解决方案是预先设置适当的显示。 e.g:

#!/bin/bash

export DISPLAY=:1.0

/usr/local/bin/matlab -nodesktop -r "startup; perform_plots; exit"

如果要在没有X服务器的盒子上运行它,可以使用Xvfb(X虚拟帧缓冲区)设置虚拟X服务器。这样做的好处是可以使用与您可能正在处理的显示器分开的显示器,这样就可以在后台运行作业,而无需在工作时随机出现。