r - 如何消除用DiagrammeR制作的流程图下方的空白并编织成pdf?

标签 r markdown r-markdown knitr diagrammer

我想要做的是在我的 R Markdown 文件中的代码块中使用DiagrammeR 创建一个基本流程图,并使其可引用(如果可能的话,就像我对 ggplot2 图形所做的那样 -> 代码中的Fig.cap =“” block 头)。

到目前为止我的代码:

```{r flowchart-ablauf, fig.cap = "Ablauf der Datenverarbeitung", fig.align = 'right', echo = FALSE}
DiagrammeR::grViz(diagram = "
              digraph rmarkdown {

              graph [nodesep = 1.5, ranksep = 1.5]                  

              node [shape = box, fontname = Helvetica, fontsize = 80, penwidth = 6, fixedsize = true, width = 16.5, height = 3]
                'Verbrauchsdaten von der\nSpitalpharmazie (Excel-Tabelle)'; 'Belegzahlen vom Ressort\nFinanzen (Excel-Tabelle)'; 

              node [shape = box, fontname = Helvetica, fontsize = 80, penwidth = 6, fixedsize = true, width = 20.5, height = 3]
              'Import der Daten aus Excel ins\nMicrosoft Access (Datenbanksoftware)'; 'Zusammenführen der Informationen und\nerstellen neuer, berechneter Tabellen';
              'Export der neu erstellten Tabellen\nin Form von Excel-Tabellen'; 'Berechnung und grafische Darstellung\nder Grafiken und Tabellen'

              node [shape = box, fontname = Helvetica, fontsize = 80, penwidth = 6, fixedsize = true, width = 20.5, height = 2]
              'Import der neuen Tabellen in R';

              #Pfeile
              edge [arrowhead = vee, arrowsize = 4, penwidth = 6]
              'Verbrauchsdaten von der\nSpitalpharmazie (Excel-Tabelle)' -> 'Import der Daten aus Excel ins\nMicrosoft Access (Datenbanksoftware)';
              'Belegzahlen vom Ressort\nFinanzen (Excel-Tabelle)' -> 'Import der Daten aus Excel ins\nMicrosoft Access (Datenbanksoftware)';
              'Import der Daten aus Excel ins\nMicrosoft Access (Datenbanksoftware)' -> 'Zusammenführen der Informationen und\nerstellen neuer, berechneter Tabellen';
              'Zusammenführen der Informationen und\nerstellen neuer, berechneter Tabellen' -> 'Export der neu erstellten Tabellen\nin Form von Excel-Tabellen'
              'Export der neu erstellten Tabellen\nin Form von Excel-Tabellen' -> 'Import der neuen Tabellen in R'
              'Import der neuen Tabellen in R' -> 'Berechnung und grafische Darstellung\nder Grafiken und Tabellen'
              }
              ")

```

编织成pdf后的样子: enter image description here

我有几个问题:

  1. 为什么我必须将字体设置得这么大才能使其可读?我的意思是它是 80,但它仍然小于 yaml header 中设置为 11pt 的文本字体大小?!
  2. 为什么“fig.align = 'right'”没有执行任何操作?
  3. 最重要的是:如何消除流程图下方(流程图和图形标题之间)的巨大空白?

最佳答案

I've found a working solution here

这就是我的代码最终的样子:

---
 header-includes:
  - \usepackage{wrapfig}
  - \usepackage{lipsum}
output: 
   pdf_document:
    keep_tex: true
 ---


```{r, include = F}
defOut <- knitr::knit_hooks$get("plot")  # save the default plot hook 
knitr::knit_hooks$set(plot = function(x, options) {  # set new plot hook ...
  x <- defOut(x, options)  # first apply the default hook
  if(!is.null(options$wrapfigure)) {  # then, if option wrapfigure is given ...
    # create the new opening string for the wrapfigure environment ...
    wf <- sprintf("\\begin{wrapfigure}{%s}{%g\\textwidth}", options$wrapfigure[[1]], options$wrapfigure[[2]])
    x  <- gsub("\\begin{figure}", wf, x, fixed = T)  # and replace the default one with it.
    x  <- gsub("{figure}", "{wrapfigure}", x, fixed = T)  # also replace the environment ending
   }
   return(x)
   })
```

```{r flowchart-ablauf, echo = F, fig.cap = "Ablauf der Datenverarbeitung", fig.align = 'right', out.extra = 'trim = {5cm 6.5cm 12.5cm 4cm}', out.width=".5\\textwidth", wrapfigure = list("R", .5)}
DiagrammeR::grViz(diagram = "
              digraph rmarkdown {

              graph [nodesep = 1.5, ranksep = 1.5]                  

              node [style = filled, fillcolor = Gray90, shape = box, fontname = Helvetica, fontsize = 80, penwidth = 6, fixedsize = true, width = 16.5, height = 3]
                'Verbrauchsdaten von der\nSpitalpharmazie (Excel-Tabelle)'; 'Belegzahlen vom Ressort\nFinanzen (Excel-Tabelle)'; 

              node [shape = box, fontname = Helvetica, fontsize = 80, penwidth = 6, fixedsize = true, width = 20.5, height = 3]
              'Import der Daten aus Excel ins\nMicrosoft Access (Datenbanksoftware)'; 'Zusammenführen der Informationen und\nerstellen neuer, berechneter Tabellen';
              'Export der neu erstellten Tabellen\nin Form von Excel-Tabellen'; 'Berechnung und grafische Darstellung\nder Grafiken und Tabellen'

              node [shape = box, fontname = Helvetica, fontsize = 80, penwidth = 6, fixedsize = true, width = 20.5, height = 2]
              'Import der neuen Tabellen in R';

              #Pfeile
              edge [arrowhead = vee, arrowsize = 4, penwidth = 6]
              'Verbrauchsdaten von der\nSpitalpharmazie (Excel-Tabelle)' -> 'Import der Daten aus Excel ins\nMicrosoft Access (Datenbanksoftware)';
              'Belegzahlen vom Ressort\nFinanzen (Excel-Tabelle)' -> 'Import der Daten aus Excel ins\nMicrosoft Access (Datenbanksoftware)';
              'Import der Daten aus Excel ins\nMicrosoft Access (Datenbanksoftware)' -> 'Zusammenführen der Informationen und\nerstellen neuer, berechneter Tabellen';
              'Zusammenführen der Informationen und\nerstellen neuer, berechneter Tabellen' -> 'Export der neu erstellten Tabellen\nin Form von Excel-Tabellen'
              'Export der neu erstellten Tabellen\nin Form von Excel-Tabellen' -> 'Import der neuen Tabellen in R'
              'Import der neuen Tabellen in R' -> 'Berechnung und grafische Darstellung\nder Grafiken und Tabellen'
              }
              ")

```

关于r - 如何消除用DiagrammeR制作的流程图下方的空白并编织成pdf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54092891/

相关文章:

r - 通过 RStudio 中的 YAML header 默认 knit 目录?

r-markdown - Jinja2 : Variable call impossible within markdown from two disticnt template using jinja2

r - 错误 : Missing $ inserted when using kable

r - 用cat()和paste()串联字符串之间有什么区别?

python - 如何检查 Markdown 中的键值元数据

shell - 将 Markdown 文件重新格式化为特定的代码风格

javascript - tui 编辑器 : how can i retrieve text (markdown\html)

r - 如何在 geom_smooth 之后而不是在 geom_line 之后显示直接标签?

r - st_intersection 到 spatialpolygon 数据框不起作用

r - 错误 : compilation failed for package ‘rlang’ in rstudio - Debian jessie 8. 0