(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【R言語】グラフ構造をdigraphで可視化する

スポンサーリンク

はじめに

グラフとはノード群とノード間の連結関係を表すエッジ群で構成されるデータ型で、簡単に言えば頂点と頂点を線で結んだデータ構造です。

具体的には以下のようなものです。
f:id:mtiit:20190811151111p:plain

本記事ではこのような図をR言語でサクッと作成する手順について解説します。

グラフ構造の可視化

DiagrammeRパッケージをインストール

> install.packages("DiagrammeR")
 パッケージを ‘C:/Users/XXX/Documents/R/win-library/3.6’ 中にインストールします 
 依存対象 (dependency) ‘brew’, ‘hms’, ‘clipr’, ‘XML’, ‘Rook’,
....

ライブラリーは以下で読み込めます。

> library("DiagrammeR")

digraphを使用

grViz関数の

> grViz
function (diagram = "", engine = "dot", allow_subst = TRUE, 
    options = NULL, width = NULL, height = NULL) 
{
....

digraphを使用して以下のようにコマンド実行すれば冒頭のグラフ図がHTMLで生成されます。

> grViz(" digraph { Step1 -> Step2 -> Step3 Step1 -> Step3 } ")

HTMLの実体は以下です。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="lib/htmlwidgets-1.3/htmlwidgets.js"></script>
<script src="lib/viz-0.3/viz.js"></script>
<link href="lib/DiagrammeR-styles-0.2/styles.css" rel="stylesheet" />
<script src="lib/grViz-binding-1.0.1/grViz.js"></script>

</head>
<body style="background-color:white;">
<div id="htmlwidget_container">
  <div id="htmlwidget-794ad9dd75782c48952a" style="width:960px;height:500px;" class="grViz html-widget"></div>
</div>
<script type="application/json" data-for="htmlwidget-794ad9dd75782c48952a">{"x":{"diagram":" digraph { Step1 -> Step2 -> Step3 Step1 -> Step3 } ","config":{"engine":"dot","options":null}},"evals":[],"jsHooks":[]}</script>
<script type="application/htmlwidget-sizing" data-for="htmlwidget-794ad9dd75782c48952a">{"viewer":{"width":450,"height":350,"padding":15,"fill":true},"browser":{"width":960,"height":500,"padding":40,"fill":false}}</script>
</body>
</html>

構文としては以下のような関係を記載し、並列的にはスペースで区切りながら情報を入れ込みます。

A -> B

おまけとして、色を付けたり横に倒したりしたコマンド実行例は以下です。

> grViz(" digraph { 東京[color='blue' style='filled' fillcolor='pink' ] 横浜[color='blue' style='filled' fillcolor='pink' ] 大船[color='blue' style='filled' fillcolor='pink' ]東京 -> 新橋 -> 品川 -> 川崎 -> 横浜 -> 保土ケ谷 -> 東戸塚 -> 戸塚 -> 大船 品川-> 西大井 -> 新川崎 -> 横浜 graph[rankdir = LR]} ")

f:id:mtiit:20190811164108p:plain

終わりに

digraph関数は以下の3つの要素を操作しながらグラフ構造を可視化していきますが

  • graph
  • node
  • edge

本記事ではノードとエッジを一行で書き殴る手法で可視化を行いました。
もっと細かい制御を実施したい場合は「DiagrammeR Docs」を参考ください。

以上、R言語によるグラフ構造の可視化についてでした。