Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

DiagrammeRと仲良くなった話ーグラフィカルモデルのためのDiagrammeR速習ー

1,238 views

Published on

Hijiyama.R finalのLT資料です。資料中のソースコードはこちらへ → http://tyamane1969.net/?p=210

Published in: Data & Analytics
  • Be the first to comment

DiagrammeRと仲良くなった話ーグラフィカルモデルのためのDiagrammeR速習ー

  1. 1. DiaggrameRと仲良くなった話 ーグラフィカルモデルのためのDiaggrameR速習ー 2017.11.26 Hijiyama.R final 広島大学グローバルキャリアデザインセンター 特別研究員 広島大学大学院 教育学研究科 学習心理学研究室 山根 嵩史
  2. 2. DiagrammeRとは ✔︎ DiagrammeRは,グラフ描画ツールGraphvizを使っ て,R上で簡単に高度な作図をするパッケージ (MermaidエンジンやNDFs/EDFsなどの機能も実装されているが今回は割愛) ✔︎ 公式サイトのドキュメントを見てみると夢が広がる DiagrammeR Docs (http://rich-iannone.github.io/DiagrammeR/graphviz_and_mermaid.html) dot言語で色々な作図が可能 (レイアウトは自動!) ノードの色,形,フォント等の 設定も充実
  3. 3. じゃあこんな図書きたい! グラフィカルモデルの例 (『実践ベイズモデリング』図15.3) ✔︎ DiagrammeRでグラフィカルモデルが描きたい グラフィカルモデル (またはプレート表現): ベイジアンモデリングで使用される,ノードの繋がりで データの生成過程を視覚的に表現した図 それっぽいコードを書いてみるが…
  4. 4. お,おう...
  5. 5. DiagrammeRと仲良くなりたい ✔︎ DiagrammeRの弱点として,(配置が自動なぶん) 思った通りの図にならないことがある ✔︎ だからといってパワポとかで作図するのも嫌 とくにMacでは 0 1 2 3 4 5 項目 1 項目 2 ☞ DiagrammeRと仲良くなりたい なんで図形とかグラフ要素に デフォルトで影ついてるの? BKなの?Sぬの?
  6. 6. DiagrammeRの記法 ✔︎ graph[],node[],edge[]の部分に分けて書く graph[]:配置の方向や背景など,グラフ全体の設定 node[]:配置したいノード名とノードの設定 edge[]:ノード間をつなぐエッジの設定 ✔︎ それぞれのノード,エッジの後ろに[]をつければ 個別に設定も可能
  7. 7. 配置に関するコマンド ✔︎ ノードの位置を調整したい edge[]内で{rank = }で設定 {rank = same; a; b} → ノードaとbを同じ階層に配置 {rank = max; a} → ノードaを一番下の階層に配置 {rank = min; a} → ノードaを一番上の階層に配置 ✔︎ 図の形状について 階層型 (dot) の他に,円形 (circo) や ネットワーク型 (neato) なども graph[]内で“layout = 〜”で設定 デフォルトはdot ✔︎ 横向きの図にしたい graph[]内で“rankdir = LR”で設定
  8. 8. 描画に関するコマンド ✔︎ ギリシャ文字を使いたい &文字列; で任意のギリシャ文字を描ける ✔︎ 上付き,下付き文字にしたい @^{文字列}で上付き文字 @_{文字列}で下付き文字 ✔︎ イタリックにしたい graph[]内で“fontname = 〜”で斜体フォントを設定 ラベルの一部だけ斜体にしたい場合には <<I>文字列</I>>
  9. 9. 先ほどのコードを修正すると… fixedsize = true ☞ 各ノードの大きさを固定 fontname = ‘Times-italic’ ☞ フォント名と斜体の設定 label = ‘&theta;@^{(h)}’ ☞ ギリシャ文字θと 上付き文字の設定 {rank = max; ns; nn} ☞ nsとnnのノードを一番下に配置 するため,{rank = } を使用
  10. 10. できた!
  11. 11. subgraphの設定 ✔︎ subgraph cluster{} で 枠付きのサブグラフ作成 ✔︎ サブグラフの外と中で ノードの位置を揃えたい ときは,graph[]内で “newrank = true”の設定 が必要
  12. 12. 仲良くなれなかった点 ✔︎ ︎一部が重なったsubgraphは描けない 例:『実践ベイズモデリング』 図18.9 ✔︎ ︎graphvizの仕様上無理っぽい 背景透明色で作った2つのサブグラフを重ね合わせ るとかどうですか。ダメですか。 参照:https://stackoverflow.com/questions/12680865/how-to-draw-overlapping-clusters-in-graphviz
  13. 13. 参考にしたサイトなど Graphvizとdot言語でグラフを描く方法のまとめ (https://qiita.com/rubytomato@github/items/51779135bc4b77c8c20d) Node, Edge and Graph Attributes (http://www.graphviz.org/doc/info/attrs.html) DiagrammeR入門 nodeの属性まとめ (https://qiita.com/kazutan/items/feea8a3d40143f1f7978) Rでグラフィカルモデルを書こう! (https://kunisatolab.github.io/how-to-graphicalModel.html) Plate notation via Graphviz/Rstudio (http://kosugitti.net/archives/5834) dot(graphviz)でsubgraph間の位置関係を整える (http://blog.livedoor.jp/hiroaki8270/archives/17759669.html)

×