从 DiagrammeR 导出美人鱼图

Posted

技术标签:

【中文标题】从 DiagrammeR 导出美人鱼图【英文标题】:Export mermaid chart from DiagrammeR 【发布时间】:2019-01-09 15:03:47 【问题描述】:

我正在尝试通过 R 将甘特图从 mermaid 导出到文件。我对任何文件格式都很满意,但 SVG 或 PNG 会更好。我正在尝试自动执行此操作,因此不能简单地通过 GUI 按下导出。

这是我的代码:

library(DiagrammeR)
graph <- mermaid("
    gantt
    dateFormat  HH:mm:ss.SSS
    title Sample Test Gantt

    section A
    thing1          :   15:58:51.556,   16:05:23.494

    section B
    thing2          :   16:02:00.391,   16:20:46.533

    section C
    thing3          :   16:18:57.352,   16:23:10.700
    thing4          :   16:24:11.705,   16:30:30.432
    ")
graph

它生成的图表:

【问题讨论】:

【参考方案1】:

这是 DiagrammeR 软件包的一个已报告问题,因此您可能需要密切关注此页面以了解未来的更新:https://github.com/rich-iannone/DiagrammeR/issues/66

有两种方法可以解决此问题:

使用网页截图

另一种保存文件的方法是使用webshot 包。这使用外部依赖 phantomjs 将 html 小部件转换为图像。可以这样设置:

install.packages("webshot")
webshot::install_phantomjs()

使用你上面的例子:

library(DiagrammeR)
library(magrittr)


gannt %>%
  htmltools::html_print() %>%
  webshot::webshot(file = "gannt.pdf")

这会将绘图保存为 PDF,但您可以通过更改文件名来创建图像,即gannt.png

使用 plotly 包

plotly 包有一个用于导出 HTML 小部件的有用功能:

plotly::export(gannt, file = "mermaid.png")

【讨论】:

【参考方案2】:

根据我对mermaid 的了解,目前还不能导出为svg 或其他格式。但是可以通过 Rmd 将许多 mermaid 对象转储到 HTML:

---
title: "Untitled"
author: "Me"
date: "August 1, 2018"
output: html_document
---

```r setup, include=FALSE
knitr::opts_chunk$set(echo = TRUE)
```
## R Markdown
This is an R Markdown document. 

```r echo=FALSE, warning=FALSE, message=FALSE
library(DiagrammeR) 
   graph <- mermaid("
   gantt
   dateFormat  HH:mm:ss.SSS
   title Sample Test Gantt

   section A
   thing1          :   15:58:51.556,   16:05:23.494

   section B
   thing2          :   16:02:00.391,   16:20:46.533

   section C
   thing3          :   16:18:57.352,   16:23:10.700
   thing4          :   16:24:11.705,   16:30:30.432
   ")
graph
graph
graph
```

它会生成一个包含所有图形的 HTML 文件。不是最佳解决方案,但比尝试手动生成大量图表要好。

【讨论】:

【参考方案3】:

将 mysteRious 的答案标记为正确,因为它确实有帮助。对于将来遇到相同问题的任何人,这是我使用的完整解决方案:

导出.Rmd

---
title: "TestingExport"
author: "me"
date: "August 2, 2018"
output: html_document
---

```r setup, include=FALSE
knitr::opts_chunk$set(echo = TRUE)
```

```r echo=FALSE, warning=FALSE, message=FALSE
library(DiagrammeR) 
graph <- mermaid("
                 gantt
                 dateFormat  HH:mm:ss.SSS
                 title Sample Test Gantt

                 section A
                 thing1          :   15:58:51.556,   16:05:23.494

                 section B
                 thing2          :   16:02:00.391,   16:20:46.533

                 section C
                 thing3          :   16:18:57.352,   16:23:10.700
                 thing4          :   16:24:11.705,   16:30:30.432
                 ")
graph
```

然后使用以下命令将其转换为 HTML: Rscript -e "rmarkdown::render('...\\Export.Rmd')"

【讨论】:

我不完全确定您为什么需要这两个文件?您是否尝试过在 RStudio 中使用 knit 按钮? @MikeyHarper 我正在自动化它,所以我从 java 文件中调用它。不过我最终并不需要这两个文件,只是使用了以下命令:Rscript -e "rmarkdown::render('&lt;filepath&gt;')"

以上是关于从 DiagrammeR 导出美人鱼图的主要内容,如果未能解决你的问题,请参考以下文章

美人鱼图在 Rmarkdown xaringan 演示文稿中未正确呈现

如何让 GitHub Pages Markdown 支持美人鱼图?

如何从我的甘特图中删除“今天”垂直线

DiagrammeR:调整节点内的字体大小

diagrammeR - 改编自“如何在我的流程图中添加武器?”

在 Word 文档中使用 DiagrammeR(使用 rMarkdown 生成)