2017/03/06 追記: 現在NDFとEDFの仕様が変更され,このコードでは動きません。また公式サイトのドキュメントでは更新されていないため,再度調査と検証が必要となっています。出来る限り早く対応したいとは思いますが,もうしばらくお待ちください…
DiagrammeR Node and Edge Data Frames
本家のドキュメント該当箇所を参考にテストします。なお出力は画面キャプチャしたものです。同一の内容をRPubsにも公開しています。こちらのほうが出力がそのままなので感覚がつかみやすいかと思います。
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!