LoginSignup
10
12

More than 5 years have passed since last update.

DiagrammeR入門 NDFとEDF

Last updated at Posted at 2016-02-02

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)

NDF_EDF1.png

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

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

render_graph(graph, output = "vivagraph")

NDF_EDF2.png

render_graph(graph, output = "visNetwork")

NDF_EDF3.png

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

Enjoy!

10
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
12