R plot 生成完全空白的 PNG

R plot generates completely blank PNG

我在 Beowulf 计算集群上 运行 运行一个 R 脚本,每当脚本 运行 在其中一个计算节点上运行时,它都会生成一个空白的 PNG。 运行 在头节点上工作正常。

为了尝试诊断问题,我将脚本简化为:

#!/usr/bin/env Rscript

the_plot <- function()
{
    x <- seq(0, 1, length.out = 100)
    y <- pbeta(x, 1, 10)
    plot(
            x,
            y,
            xlab = "False Positive Rate",
            ylab = "Average true positive rate",
            type = "l"
    )

}

png(file='plot_test.png', width=400, height=300, type='cairo')
par(family='sans', cex=1, mar=c(5,5,1,1))
the_plot()
dev.off()

当我在头节点上 运行 时,它会生成一条曲线、轴和标签。在计算节点上,标签没有出现,所以可能是字体问题。

我以前遇到过同样症状的问题,加上这样的错误消息:

Fontconfig error: Cannot load default config file

我发现 stata.com's support page 上描述的错误,我通过将 /etc/fonts 映射到计算节点来消除它。错误消息消失了,但绘图仍然是空白,所以可能还有另一个文件夹需要映射。

我安装了 strace 并在头节点上成功 运行 时跟踪了脚本正在加载的文件。我还跟踪了它在计算节点上 运行 失败的情况。

strace -r -o strace.txt ./plot_test.R
bpsh 0 strace -r -o strace_n0.txt ./plot_test.R

从文件中清除大量噪音并比较两者后,我发现脚本正在加载 /usr/lib64/libcairo.so.2/usr/share/fonts/var/cache/fontconfig。 None 映射到计算节点。

将文件夹映射到计算节点是通过 /etc/exports/etc/beowulf/fstab 控制的,如 Scyld documentation 中所述。映射所有这些文件夹后,绘图就起作用了。