Make diagrams in R using viz.js or mermaid.js with infrastructure provided by htmlwidgets.
Arguments
- diagram
The diagram in
graphviz
ormermaid
format, or, a file (as a connection or file name) containing a diagram specification. The recommended filename extensions are.gv
and.mmd
for the Graphviz and the mermaid diagram specifications, respectively. If no diagram is provided (diagram = ""
) then the function will assume that a diagram will be provided byhtmltools::tags()
andDiagrammeR
is just being used for dependency injection.- type
A string, either
mermaid
(default) orgrViz
indicating the type of diagram spec and the desired parser/renderer.- ...
Any other parameters to pass to
grViz
ormermaid
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
if (FALSE) { # \dontrun{
# 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
")
} # }