DiagrammeR {DiagrammeR} | R Documentation |
R + mermaid.js
Description
Make diagrams in R using viz.js or mermaid.js with infrastructure provided by htmlwidgets.
Usage
DiagrammeR(diagram = "", type = "mermaid", ...)
Arguments
diagram |
The diagram in |
type |
A string, either |
... |
Any other parameters to pass to |
Value
An object of class htmlwidget
that will intelligently print itself
into HTML in a variety of contexts including the R console, within R
Markdown documents, and within Shiny output bindings.
Examples
## Not run:
# note the whitespace is not important
DiagrammeR("
graph LR
A-->B
A-->C
C-->E
B-->D
C-->D
D-->F
E-->F
")
DiagrammeR("
graph TB
A-->B
A-->C
C-->E
B-->D
C-->D
D-->F
E-->F
")
DiagrammeR("graph LR;A(Rounded)-->B[Squared];B-->C{A Decision};
C-->D[Square One];C-->E[Square Two];
style A fill:#E5E25F; style B fill:#87AB51; style C fill:#3C8937;
style D fill:#23772C; style E fill:#B6E6E6;"
)
# Load in the 'mtcars' dataset
mtcars
connections <- sapply(
1:ncol(mtcars)
,function(i) {
paste0(
i
,"(",colnames(mtcars)[i],")---"
,i,"-stats("
,paste0(
names(summary(mtcars[,i]))
,": "
,unname(summary(mtcars[,i]))
,collapse="<br/>"
)
,")"
)
}
)
DiagrammeR(
paste0(
"graph TD;", "\n",
paste(connections, collapse = "\n"),"\n",
"classDef column fill:#0001CC, stroke:#0D3FF3, stroke-width:1px;" ,"\n",
"class ", paste0(1:length(connections), collapse = ","), " column;"
)
)
# also with DiagrammeR() you can use tags from htmltools
# just make sure to use class = "mermaid"
library(htmltools)
diagramSpec = "
graph LR;
id1(Start)-->id2(Stop);
style id1 fill:#f9f,stroke:#333,stroke-width:4px;
style id2 fill:#ccf,stroke:#f66,stroke-width:2px,stroke-dasharray: 5, 5;
"
html_print(tagList(
tags$h1("R + mermaid.js = Something Special")
,tags$pre(diagramSpec)
,tags$div(class="mermaid",diagramSpec)
,DiagrammeR()
))
# sequence diagrams
# Using this "How to Draw a Sequence Diagram"
# http://www.cs.uku.fi/research/publications/reports/A-2003-1/page91.pdf
# draw some sequence diagrams with DiagrammeR
DiagrammeR("
sequenceDiagram;
customer->>ticket seller: ask for ticket;
ticket seller->>database: seats;
alt tickets available
database->>ticket seller: ok;
ticket seller->>customer: confirm;
customer->>ticket seller: ok;
ticket seller->>database: book a seat;
ticket seller->>printer: print ticket;
else sold out
database->>ticket seller: none left;
ticket seller->>customer: sorry;
end
")
## End(Not run)