R 绘制带有矩形而不是文本的图

Tom*_*omo 5 linux pipeline r snakemake singularity-container

我在建设有一个管道snakemake,并使用condasingularity环境以确保可重复性。我遇到了一个错误,我的绘图上的文本被矩形替换 在此处输入图片说明

在 Linux 和 Mac 系统上试验管道并禁用奇异容器后,问题似乎源于缺少字体库,因为当我仅在 Mac 上仅使用conda( --use-conda)运行管道时,文本绘制正常。

奇点容器是从这个使用 Debian GNU/Linux 的miniconda docker镜像构建的。我设法创建了一个最小的示例管道,其中没有绘制文本。

# Snakefile
singularity: "docker://continuumio/miniconda3"

rule all:
    input:
        "mtcars-plot.png"

rule plot_mtcars:
    output:
        "mtcars-plot.png"
    conda:
        "minimal.yaml"
    script:
        "mtcars-test.R"
Run Code Online (Sandbox Code Playgroud)
# mtcars-test.R
library(ggplot2)
png("mtcars-plot.png")
ggplot(mtcars, aes(factor(cyl), mpg)) + geom_boxplot()
dev.off()
Run Code Online (Sandbox Code Playgroud)
# minimal.yaml
channels:
    - bioconda
    - conda-forge
    - defaults
dependencies:
    - r-base =3.6
    - r-ggplot2
Run Code Online (Sandbox Code Playgroud)

要绘制断开的图,请运行管道

snakemake --use-conda --use-singularity
Run Code Online (Sandbox Code Playgroud)

在 Debian GNU/Linux 上使用 R 正确绘制文本时,我可能缺少哪些软件包/库?

Tom*_*omo 6

感谢 MrFlick 的评论,第二个链接mscorefontsR 中的文本支持需要该包。

添加mscorefontsconda环境可以解决问题

# minimal.yaml
channels:
    - bioconda
    - conda-forge
    - defaults
dependencies:
    - r-base =3.6
    - r-ggplot2
    - mscorefonts
Run Code Online (Sandbox Code Playgroud)