R + mermaid.js
Make diagrams in R using viz.js or mermaid.js with infrastructure provided by htmlwidgets.
DiagrammeR(diagram = "", type = "mermaid", ...)
diagram |
The diagram in |
type |
A string, either |
... |
Any other parameters to pass to |
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.
## 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 data(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 library(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)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.