【问题标题】:Matlab plots with a very low resolution when using -nodesktop option使用 -nodesktop 选项时,Matlab 绘图的分辨率非常低
【发布时间】:2014-02-07 05:43:15
【问题描述】:

当使用 -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"

任何帮助将不胜感激!

【问题讨论】:

  • 你能发布get(fh)的输出吗?

标签: matlab crontab resolution


【解决方案1】:

我发现了问题。

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

解决方法是事先设置适当的显示。例如:

#!/bin/bash

export DISPLAY=:1.0

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

如果您想在没有 X 服务器的机器上运行它,您可以使用 Xvfb(X 虚拟帧缓冲区)设置一个虚拟 X 服务器。这还具有使用与您可能正在处理的显示器分开的显示器的优点,因此作业可以在后台运行,而不会在您工作时随机出现绘图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2021-03-07
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多