Facetgrid 图(使用 ggplotly)在 docker 容器中显示为灰色

Posted

技术标签:

【中文标题】Facetgrid 图(使用 ggplotly)在 docker 容器中显示为灰色【英文标题】:Facetgrid plot (with ggplotly) greyed out in docker container 【发布时间】:2021-12-01 05:04:50 【问题描述】:

对于我想封装在 docker 容器中的每日报告 Rmarkdown 脚本,我遇到了一个问题,该脚本是从 ggplot facet_grid 创建的,然后使用 ggplotly 转换的。

当我在 R 工作室本地运行脚本时,我的情节按预期工作:

当我通过我的 docker 容器运行脚本时,它完全变灰:

数据确实存在,只是没有显示:

脚本之间没有区别,除了我在哪里运行它,我实际上不知道在哪里寻找解决这个错误的地方。

这是 rmarkdown 块中的 ggplot+plotly 部分:

p <- ggplot(table_plot_month, aes(x = action_date, y = n, fill = action_type)) +
      geom_bar(stat='identity') +
      facet_grid(orga_initiales ~ .) + theme_bw() +
      theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1), legend.position = "none") +
      labs(y = "Nombre Actions", x = "Date", fill = "Type action")

gp <- ggplotly(p)

gp <- ggplotly(p) 
gp[['x']][['layout']][['annotations']][[1]][['y']] <- -0.25
gp[['x']][['layout']][['annotations']][[2]][['x']] <- -0.07

gp %>% layout(margin = list(l = 120, b=70))

以下是我用来创建镜像和运行容器并将容器输出目录与主机输出目录绑定的 docker 命令:

docker build -t daily_report_image C:/my_path

docker run -d --name daily_report -v ~/my_path:/home/output daily_report_image 

这是我用来创建映像的 Dockerfile:

FROM rocker/r-base

RUN apt-get update \
 && apt-get install --yes --no-install-recommends \
        apt-transport-https \
        curl \
        gnupg \
        unixodbc-dev \
        libfontconfig1-dev \
 && curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
 && curl https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list \
 && apt-get update \
 && ACCEPT_EULA=Y apt-get install --yes --no-install-recommends msodbcsql17 \
 && install2.r odbc \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/* \
 && rm -rf /tmp/*

 RUN apt-get update \
    && apt-get install -y --no-install-recommends \
                ghostscript \
                lmodern \
                pandoc-citeproc \
                qpdf \
                r-cran-formatr \
                r-cran-ggplot2 \
                r-cran-knitr \
                r-cran-rmarkdown \
                r-cran-runit \
                r-cran-testthat \
                r-cran-tidyverse \
                r-cran-stringr \
                r-cran-lubridate \
                r-cran-plotly \
                r-cran-formattable \
                r-cran-here \
        && install.r binb linl pinp tint \
        && mkdir ~/.R \
        && echo _R_CHECK_FORCE_SUGGESTS_=FALSE > ~/.R/check.Renviron \
        && cd /usr/local/bin \
        && ln -s /usr/lib/R/site-library/littler/examples/render.r .

RUN R -e "install.packages('fontawesome')"
RUN R -e "install.packages('kableExtra')"
RUN R -e "install.packages('flexdashboard')"

WORKDIR /home

COPY src/suivi_activite_html.Rmd suivi_activite_html.Rmd
COPY src/run_all_daily_reports.R run_all_daily_reports.R
COPY .env .env

CMD R -e "source('run_all_daily_reports.R')"

知道我应该去哪里看吗?是 docker 问题,plotly/ggplot 兼容性问题?

【问题讨论】:

【参考方案1】:

我通过更改我的图像并使用 install.packages 函数而不是二进制文件进行安装来解决它:

FROM rocker/r-base

RUN apt-get update \
 && apt-get install --yes --no-install-recommends \
        apt-transport-https \
        curl \
        gnupg \
        unixodbc-dev \
        libfontconfig1-dev \
 && curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
 && curl https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list \
 && apt-get update \
 && ACCEPT_EULA=Y apt-get install --yes --no-install-recommends msodbcsql17 \
 && install2.r odbc \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/* \
 && rm -rf /tmp/*

 RUN apt-get update \
    && apt-get install -y --no-install-recommends \
                ghostscript \
                lmodern \
                pandoc-citeproc \
                qpdf \
                r-cran-formatr \
                r-cran-ggplot2 \
                r-cran-knitr \
                r-cran-rmarkdown \
                r-cran-runit \
                r-cran-testthat \
                r-cran-tidyverse \
                r-cran-stringr \
                r-cran-lubridate \
                #r-cran-plotly \
                r-cran-formattable \
                r-cran-here \
        && install.r binb linl pinp tint \
        && mkdir ~/.R \
        && echo _R_CHECK_FORCE_SUGGESTS_=FALSE > ~/.R/check.Renviron \
        && cd /usr/local/bin \
        && ln -s /usr/lib/R/site-library/littler/examples/render.r .

RUN R -e "install.packages('fontawesome')"
RUN R -e "install.packages('kableExtra')"
RUN R -e "install.packages('flexdashboard')"
RUN R -e "install.packages('plotly')"

WORKDIR /home

COPY src/suivi_activite_html.Rmd suivi_activite_html.Rmd
COPY src/run_all_daily_reports.R run_all_daily_reports.R
COPY .env .env

CMD R -e "source('run_all_daily_reports.R')"

【讨论】:

以上是关于Facetgrid 图(使用 ggplotly)在 docker 容器中显示为灰色的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2多子图(facet grid)绘制注释实战:无子图注释有子图注释自定义每个子图注释的位置多网面子图注释

seaborn使用FacetGrid函数可视化山脊图(Ridgeline Plot with Seaborn)

Python。在 Seaborn Facetgrid 上使用两个 y 轴绘制线图和条形图

在 Seaborn/其他库中聚合的 FacetGrid 图

如何反转 seaborn 图形级别图的轴(FacetGrid)

Seaborn FacetGrid 用于分层计数图?