DiagrammeR Node and Edge Data Frames

本家のドキュメント該当箇所を参考にテストします。

DiagrammeR

ダイアグラムを作成するパッケージです。詳細は本家ドキュメントを見てください。非常に充実していますが日本語でのドキュメントはほとんどないです。

DataFrameからNodeとEdgeを作成

データフレームからダイアグラムを作成するにはNode用のデータフレームとEdge用のデータフレームを作成する必要があります。

Node Data Frame(NDF)の作成

詳しくは“Creating an NDF”を参考にしてください。できるだけ最小なものを作ります。

library(DiagrammeR)
nodes_1 <- 
  create_nodes(nodes = c(letters[1:3]))
nodes_1
##   nodes type label
## 1     a          a
## 2     b          b
## 3     c          c

create_nodes(nodes=c())でノードを作成します。nodesがNodeのidで、labelを指定しなければそのままこのidがラベル(ノード内に表示される文字)となります。1レコード(行)の内容が1つのノードの情報となります。

Edge Data Frame(EDF)の作成

詳しくは“Creating an EDF”を参考にしてください。できるだけ最小なものを作ります。

edges_1 <-
  create_edges(from = c("a","b"),
               to = c("c","c"))
edges_1
##   from to rel
## 1    a  c    
## 2    b  c

create_edges(from=(),to=())でエッジを作成します。fromはエッジがスタートするノードで、toはエッジが到達するノードを指定します。1レコード(行)の内容が1つのエッジの情報となります。

NDFとEDFからダイアグラム作成

以上2つから、ダイアグラムを作成します。詳細は本家のドキュメント該当箇所を参照してください。

graph <- create_graph(
  nodes_df = nodes_1,
  edges_df = edges_1
)
str(graph)
## List of 10
##  $ graph_name : NULL
##  $ graph_time : NULL
##  $ graph_tz   : NULL
##  $ nodes_df   :'data.frame': 3 obs. of  3 variables:
##   ..$ nodes: chr [1:3] "a" "b" "c"
##   ..$ type : chr [1:3] "" "" ""
##   ..$ label: chr [1:3] "a" "b" "c"
##  $ edges_df   :'data.frame': 2 obs. of  3 variables:
##   ..$ from: chr [1:2] "a" "b"
##   ..$ to  : chr [1:2] "c" "c"
##   ..$ rel : chr [1:2] "" ""
##  $ graph_attrs: NULL
##  $ node_attrs : NULL
##  $ edge_attrs : NULL
##  $ directed   : logi TRUE
##  $ dot_code   : chr "digraph {\n\n  'a' [label = 'a'] \n  'b' [label = 'b'] \n  'c' [label = 'c'] \n  'a'->'c' \n  'b'->'c' \n}"
##  - attr(*, "class")= chr "dgr_graph"

create_graph()graphクラスのオブジェクトを作成します。先ほど作成したNDFとEDFを上記コードのように指定すればOKです。なおstr(graphを見てもらえれば、だいたいどんな情報を持っているかがわかるかと思います。

なお、このままでは肝心のダイアグラムが表示されませんのでレンダリングします。

render_graph(graph)

render_graph()でレンダリングします。RStudioならViewerで表示されますし、このようにRmdなら出力として表示されます。なお、デフォルトで出力されるのはgrVisの標準スタイルです。mermaidの方を指定する方法は…そのうち検討します。

引数のoutput=でいくつか指定するとタイプが違ったものがでます。詳しくは?render_graphを参照してください。

render_graph(graph, output = "vivagraph")

render_graph(graph, output = "visNetwork")

ここまでの知識があれば、最低限ダイアグラムを作成することが可能です。もちろん、このパッケージはもっといろんなことがたくさん出来るようになっています。それらについてはまたいつか。

Enjoy!