DiagrammeR: Force horizontal arrows to be straight rather than diagonal

825 views Asked by At

I am attempting to recreate this example as a test for a flow diagram for a project I am working on: https://dannyjnwong.github.io/STROBE-CONSORT-Diagrams-in-R/

That page shows the code should result in a diagram that looks like this: https://dannyjnwong.github.io/figures/2018-02-12-STROBE-CONSORT-Diagrams-in-R/STROBE.png

However, when I try running the same exact code in RStudio I get this instead, the horizontal arrows do not render as horizontal, they instead curve downwards:

enter image description here

Is there any way to force these arrows to be straight and horizontal as they are in the github example? Could it perhaps be related to the version of DiagrammeR? That post uses DiagrammeR_0.9.2 while mine is using DiagrammeR_1.0.6.1 I would like to avoid having to roll back my version of the package if possible. Thanks!

1

There are 1 answers

0
Ben On BEST ANSWER

I use ortho splines with DiagrammeR to get horizontal lines in my flowcharts. I tried using add_global_graph_attrs with create_graph in your example which produced horizontal lines but did not keep the architecture intact.

Here is how I have made similar graphs. I use glue for convenience to insert specific values and text in the flowchart. Perhaps this may be helpful for you.

library(DiagrammeR)
library(glue)

n <- 1000
exclude1 <- 100
exclude2 <- 50
include1 <- n - exclude1 - exclude2

grViz(
  glue("digraph my_flowchart {{ 
      graph[splines = ortho]
      node [fontname = Helvetica, shape = box, width = 4, height = 1]
      
        node1[label = <Total available patients<br/>(n = {n})>]
                
        blank1[label = '', width = 0.01, height = 0.01]
        excluded1[label = <Excluded because of<br/>exclusion criteria (n={exclude1})>]
        
        node1 -> blank1[dir = none];
        blank1 -> excluded1[minlen = 2];
        {{ rank = same; blank1 excluded1 }}
        
        blank2[label = '', width = 0.01, height = 0.01]
        excluded2[label = <Excluded because of missing values (n={exclude2})>]
        
        blank1 -> blank2[dir = none];
        blank2 -> excluded2[minlen = 2];
        {{ rank = same; blank2 excluded2 }}
        
        node2[label = <Included for analysis<br/>(n={include1})>]
        blank2 -> node2;
        
        node3[label = <Data linked with<br/>external dataset>]
        node2 -> node3;
     }}")
)

Note: a couple of efforts have been made to construct CONSORT diagrams:

Diagram

diagrammer example