Search code examples
rdiagrammer

How to rearrange diagram in R


I updated my diagrammer to version 0.9.0 and started rendering different diagram from the same data. My data frame now looks like this:

df <- data.frame(col1 = c( "Cat", "Dog", "Bird"),
                 col2 = c( "Feline", "Canis", "Avis"), 
                 stringsAsFactors=FALSE)

The rest of code looks like this:

uniquenodes <- unique(c(df$col1, df$col2))
library(DiagrammeR)
nodes <- create_node_df(n=length(uniquenodes), nodes = seq(uniquenodes),  type="number", label=uniquenodes)
edges <- create_edge_df(from=match(df$col1, uniquenodes), to=match(df$col2, uniquenodes), rel="related")

g <- create_graph(nodes_df=nodes, edges_df=edges)
render_graph(g)

When code is used I get this diagram:

enter image description here

When it should look like this:

enter image description here


Solution

  • Create graph with attr_theme = NULL:

    g <- create_graph(nodes_df=nodes, edges_df=edges, attr_theme = NULL)
    

    In current version, DiagrammeR sets the global attribute layout to neato. You can check this with:

    g <- create_graph(nodes_df=nodes, edges_df=edges)
    get_global_graph_attrs(g)
    
    #           attr      value attr_type
    # 1       layout      neato     graph
    # 2  outputorder edgesfirst     graph
    # 3     fontname  Helvetica      node
    # 4     fontsize         10      node
    # 5        shape     circle      node
    # 6    fixedsize       true      node
    # 7        width        0.5      node
    # 8        style     filled      node
    # 9    fillcolor  aliceblue      node
    # 10       color     gray70      node
    # 11   fontcolor     gray50      node
    # 12         len        1.5      edge
    # 13       color     gray40      edge
    # 14   arrowsize        0.5      edge
    

    You can also set these attributes with set_global_graph_attrs after creating the graph object.