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

Posted

技术标签:

【中文标题】美人鱼图在 Rmarkdown xaringan 演示文稿中未正确呈现【英文标题】:Mermaid diagrams not rendering correctly in Rmarkdown xaringan presentations 【发布时间】:2020-02-29 12:18:36 【问题描述】:

我正在尝试在使用 xaringan 渲染的 Rmarkdown html 演示文稿中制作一些简单的流程图。我正在使用DiagrammeR 包绘制美人鱼图。但是,尽管图表在 Rstudio 查看器中正确显示,但样式不会出现在演示输出中。

例如

DiagrammeR::mermaid("
graph LR;
A((Orange)) --> B((Grey));

classDef orange fill:#f96;
classDef grey fill:#d3d3d3;
class A orange;
class B grey;
")

在控制台运行时按预期生成一个橙色节点和一个灰色节点。然而,

---
title: "Simple Example" 
output: 
  xaringan::moon_reader
---


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

## Flow chart

```r example, fig.align='center', fig.retina=3
DiagrammeR::mermaid("
graph LR;
A((Orange)) --> B((Grey));

classDef orange fill:#f96;
classDef grey fill:#d3d3d3;
class A orange;
class B grey;
")
```

以默认美人鱼颜色生成流程图,忽略样式。

有人知道解决方法吗?我也愿意接受其他软件包的建议以绘制简单的树形图。

【问题讨论】:

【参考方案1】:

美人鱼创建一个 htmlwidget 作为输出。您应该将其包装到 <iframe> 部分中。 widgetframe 包可以为您做到这一点,其他基于 htmlwidget 的应用程序,如 DT、leaflet、Dygraph 可以通过此方法嵌入到 xaringan 中。

---
title: "Simple Example" 
output: 
  xaringan::moon_reader
---


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

## Flow chart

```r example, fig.align='center', fig.retina=3

suppressPackageStartupMessages(library(widgetframe))


l=DiagrammeR::mermaid("
graph LR;
A((Orange)) --> B((Grey));

classDef orange fill:#f96;
classDef grey fill:#d3d3d3;
class A orange;
class B grey;
")

widgetframe::frameWidget(l)
```

【讨论】:

谢谢,这是一个很好的答案,但受到限制,它为图表提供了白色背景,不幸的是,非白色幻灯片看起来很不幸。奇怪的是,我发现如果您单独为节点设置样式 style A fill:#d3d3d3 它可以正常工作。 它们是纯 html/CSS/js,我怀疑代码在您的问题中不起作用的原因是 xaringan 的 CSS/js 干扰了美人鱼 CSS/js。但这恐怕很难调试。 @gfgm 我刚刚发现如果你使用 widgetframe::frameableWidget(l) 而不是 widgetframe::frameWidget(l),它会保持默认的透明背景。

以上是关于美人鱼图在 Rmarkdown xaringan 演示文稿中未正确呈现的主要内容,如果未能解决你的问题,请参考以下文章

xaringan Markdown 幻灯片工具

如何使用 css 文件控制 xaringan 幻灯片 rmarkdown 中标题幻灯片中的作者和日期文本

xaringan:减少输入和输出之间的垂直空间?

使用 xaringan 设置默认内容类

如何在 DT::datatable() 中搜索时停止 xaringan 的键盘快捷键?

为啥 Xaringan 幻灯片中没有出现智能引号和破折号?