2009.11.22
diagramパッケージを使い倒す使ってみる
Tsukuba.R #6
id:yag_ays
2009年11月22日日曜日
自己紹介
✤ id:yag_ays
✤ @yag_ays
✤ ’87生まれ / B4 / 生態学
✤ Rで卒論データいじり
✤ MacOSX + Emacs + ESS
2009年11月22日日曜日
library(diagram) + Graph
2009年11月22日日曜日
Rのdiagramというパッケージ
✤ グラフやネットワーク,フローチャートなどを描くため
のRの外部パッケージ
✤ このパッケージの作者はオランダの生物学者のため,食
物連鎖や物質循環のデータが入っている.
R package diagram...
準備
> install.packages("diagram")
> library(diagram)
2009年11月22日日曜日
機能
✤ 大まかにわけて3つ
✤ plotmat
✤ plotweb
✤ Flowchart(node + edge)
2009年11月22日日曜日
demo
2009年11月22日日曜日
plotmat()の基本的な書式
> plotmat(matrix, pos=position, name=names)
2009年11月22日日曜日
ノードとエッジの関係:matrix
> example
[,1] [,2] [,3] [,4]
[1,] 0 1 0 0
[2,] 1 0 0 1
[3,] 0 0 0 0
[4,] 0 1 0 0
✤ いわゆる隣接行列
✤ 値や文字列を代入で...
※ 注意...!?
✤ 隣接行列の形式が通常と逆...?
✤ t()で転置行列
✤
> M <- matrix(nrow=4, ncol=4,
byrow=T, data=0)
> M[1,2] <- "12"
> plotmat(M, nam...
pos=...について
✤ ノードのポジション(pos)を設定する.
✤ 各行のノードの個数をベクトルで指定.
このようにしたい
2009年11月22日日曜日
2009年11月22日日曜日
2009年11月22日日曜日
2009年11月22日日曜日
2009年11月22日日曜日
pos=c(3,2,1)
2009年11月22日日曜日
例えば...
✤ この場合は...
plotmat(matrix, pos=6)
2009年11月22日日曜日
name=...について
✤ ベクトルで指定
✤ c(“hoge”,”fuga”,”hehehe”)
✤ 日本語もOK(ただしRの描写の日
本語化をしておく必要有)
2009年11月22日日曜日
その他:細かなパラメータ
✤ 例) ノードの形
✤ とにかく指定できるパラメータが多い...
✤
plotmat(A, pos=NULL, curve=NULL, name=NULL, absent=0,
relsize=1, lwd=2, l...
エッジのパラメータ
✤ matrixに重さを入れておいて
arr.lwd=matrixとすると, 
エッジの重みを太さで表現できる
✤ エッジを直線にするには
curve=0とする.
2009年11月22日日曜日
こんなことも出来ます
http://blog.livedoor.jp/zanten/archives/cat_27571.html
2009年11月22日日曜日
plotweb()
✤ 基本的にはplotmatと同じ
✤ ノードの配置が円形
✤
2009年11月22日日曜日
plotweb()の描き方
> plotweb
(Takapotoweb,main="Takapo
to atoll planktonic food
web",leg.title="mgC/m2/
day",lab.size=1)
2009年1...
例えば...
✤ Twitter検索(yats)で調べた
Replyの飛ばし合い具合
✤ syou先生ごめんなさい><
> plotweb
(t.mat,name=t.name,leg
end=F)
2009年11月22日日曜日
flowchart(node + edge)
✤ openplotmat()関数で描写範囲を作成.
✤ coordinates()関数でノードの個数と位置を指定して
”アタリ”をつける.
✤ ノードのx座標,y座標に従って,ノード・エッジを書き...
flowchartの描き方
>openplotmat()
> elpos<-coordinates (c
(1,1,2,4))
>fromto <- matrix
(ncol=2,byrow=TRUE,data=c
(1,2,2,3,2,4,4...
> elpos
[,1] [,2]
[1,] 0.500 0.875
[2,] 0.500 0.625
[3,] 0.250 0.375
[4,] 0.750 0.375
[5,] 0.125 0.125
[6,] 0.375 0.125
[7...
> textellipse(elpos[1,],0.1,lab="start")
> textrect (elpos[2,],0.15,0.05,lab="found term?")
> textrect (elpos[4,],0.15,0.0...
2009年11月22日日曜日
mar <- par(mar=c(1,1,1,1))
elpos<-coordinates (c(1,1,1,1,1,1,1,1),mx=-0.1)
segmentarrow(elpos[7,],elpos[2,],arr.pos=0.15,d...
いったい何をしているのか...
✤ それぞれのノードとエッジを,サイズや位置を細かく指
定して書いている.
✤ これは大変...
✤ 書式さえ作っておけば後は埋めるだけ...ではない.テキス
トに合わせて図形の大きさなどを調整する必要がある.
...
結論
✤ diagramパッケージを使うと綺麗なグラフが書けるよ!
✤ 隣接行列の形式には気をつけてね!
✤ あまり大規模なグラフの描写には向かないよ!
✤ RならigraphやRgraphvizを使ってね!
2009年11月22日日曜日
補足説明
✤ Rでグラフを扱うならigraph,Rgraphvizなどのパッケー
ジが便利.
✤ あとは,RじゃないけどCytoscapeとか.
✤
2009年11月22日日曜日
ありがとうございました
2009年11月22日日曜日
Upcoming SlideShare
Loading in …5
×

Diagramパッケージを使ってみる

1,943 views

Published on

Tsukuba.R #6 by @yag_ays

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,943
On SlideShare
0
From Embeds
0
Number of Embeds
184
Actions
Shares
0
Downloads
12
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Diagramパッケージを使ってみる

  1. 1. 2009.11.22 diagramパッケージを使い倒す使ってみる Tsukuba.R #6 id:yag_ays 2009年11月22日日曜日
  2. 2. 自己紹介 ✤ id:yag_ays ✤ @yag_ays ✤ ’87生まれ / B4 / 生態学 ✤ Rで卒論データいじり ✤ MacOSX + Emacs + ESS 2009年11月22日日曜日
  3. 3. library(diagram) + Graph 2009年11月22日日曜日
  4. 4. Rのdiagramというパッケージ ✤ グラフやネットワーク,フローチャートなどを描くため のRの外部パッケージ ✤ このパッケージの作者はオランダの生物学者のため,食 物連鎖や物質循環のデータが入っている. R package diagram : visualising simple graphs, flowcharts, and webs 2009年11月22日日曜日
  5. 5. 準備 > install.packages("diagram") > library(diagram) 2009年11月22日日曜日
  6. 6. 機能 ✤ 大まかにわけて3つ ✤ plotmat ✤ plotweb ✤ Flowchart(node + edge) 2009年11月22日日曜日
  7. 7. demo 2009年11月22日日曜日
  8. 8. plotmat()の基本的な書式 > plotmat(matrix, pos=position, name=names) 2009年11月22日日曜日
  9. 9. ノードとエッジの関係:matrix > example [,1] [,2] [,3] [,4] [1,] 0 1 0 0 [2,] 1 0 0 1 [3,] 0 0 0 0 [4,] 0 1 0 0 ✤ いわゆる隣接行列 ✤ 値や文字列を代入できる ✤ 簡単なTeX表記も可能 2009年11月22日日曜日
  10. 10. ※ 注意...!? ✤ 隣接行列の形式が通常と逆...? ✤ t()で転置行列 ✤ > M <- matrix(nrow=4, ncol=4, byrow=T, data=0) > M[1,2] <- "12" > plotmat(M, name=1:4, pos=c(1,2,1)) 2009年11月22日日曜日
  11. 11. pos=...について ✤ ノードのポジション(pos)を設定する. ✤ 各行のノードの個数をベクトルで指定. このようにしたい 2009年11月22日日曜日
  12. 12. 2009年11月22日日曜日
  13. 13. 2009年11月22日日曜日
  14. 14. 2009年11月22日日曜日
  15. 15. 2009年11月22日日曜日
  16. 16. pos=c(3,2,1) 2009年11月22日日曜日
  17. 17. 例えば... ✤ この場合は... plotmat(matrix, pos=6) 2009年11月22日日曜日
  18. 18. name=...について ✤ ベクトルで指定 ✤ c(“hoge”,”fuga”,”hehehe”) ✤ 日本語もOK(ただしRの描写の日 本語化をしておく必要有) 2009年11月22日日曜日
  19. 19. その他:細かなパラメータ ✤ 例) ノードの形 ✤ とにかく指定できるパラメータが多い... ✤ plotmat(A, pos=NULL, curve=NULL, name=NULL, absent=0, relsize=1, lwd=2, lcol="black" , box.size=0.1, box.type="circle", box.prop=1,box.col="white", box.lcol=lcol, box.lwd=lwd, shadow.size=0.01, shadow.col="grey", dr=0.01, dtext=0.3, self.lwd=1, self.cex=1, self.shiftx=box.size, self.shifty=NULL, self.arrpos=NULL, arr.lwd=lwd, arr.lcol=lcol, arr.col="black", arr.type="curved",arr.pos=0.5, arr.length=0.4, arr.width=arr.length/2, endhead=FALSE, mx=0.0, my=0.0, box.cex=1, txt.col="black", prefix="", cex.txt=1, add=FALSE, main="", ...) 2009年11月22日日曜日
  20. 20. エッジのパラメータ ✤ matrixに重さを入れておいて arr.lwd=matrixとすると,  エッジの重みを太さで表現できる ✤ エッジを直線にするには curve=0とする. 2009年11月22日日曜日
  21. 21. こんなことも出来ます http://blog.livedoor.jp/zanten/archives/cat_27571.html 2009年11月22日日曜日
  22. 22. plotweb() ✤ 基本的にはplotmatと同じ ✤ ノードの配置が円形 ✤ 2009年11月22日日曜日
  23. 23. plotweb()の描き方 > plotweb (Takapotoweb,main="Takapo to atoll planktonic food web",leg.title="mgC/m2/ day",lab.size=1) 2009年11月22日日曜日
  24. 24. 例えば... ✤ Twitter検索(yats)で調べた Replyの飛ばし合い具合 ✤ syou先生ごめんなさい>< > plotweb (t.mat,name=t.name,leg end=F) 2009年11月22日日曜日
  25. 25. flowchart(node + edge) ✤ openplotmat()関数で描写範囲を作成. ✤ coordinates()関数でノードの個数と位置を指定して ”アタリ”をつける. ✤ ノードのx座標,y座標に従って,ノード・エッジを書き 加えていく. 特徴:ノード,エッジを個別に描く いわゆる低水準関数的なアレ 2009年11月22日日曜日
  26. 26. flowchartの描き方 >openplotmat() > elpos<-coordinates (c (1,1,2,4)) >fromto <- matrix (ncol=2,byrow=TRUE,data=c (1,2,2,3,2,4,4,7,4,8)) 2009年11月22日日曜日
  27. 27. > elpos [,1] [,2] [1,] 0.500 0.875 [2,] 0.500 0.625 [3,] 0.250 0.375 [4,] 0.750 0.375 [5,] 0.125 0.125 [6,] 0.375 0.125 [7,] 0.625 0.125 [8,] 0.875 0.125 > fromto [,1] [,2] [1,] 1 2 [2,] 2 3 [3,] 2 4 [4,] 4 7 [5,] 4 8 2009年11月22日日曜日
  28. 28. > textellipse(elpos[1,],0.1,lab="start") > textrect (elpos[2,],0.15,0.05,lab="found term?") > textrect (elpos[4,],0.15,0.05,lab="related?") > textellipse(elpos[3,],0.1,0.1,lab=c("other","term")) > textellipse(elpos[7,],0.1,0.1,lab=c("make","a link")) > textellipse(elpos[8,],0.1,0.1,lab=c("new","article")) 案外原始的... 2009年11月22日日曜日
  29. 29. 2009年11月22日日曜日
  30. 30. mar <- par(mar=c(1,1,1,1)) elpos<-coordinates (c(1,1,1,1,1,1,1,1),mx=-0.1) segmentarrow(elpos[7,],elpos[2,],arr.pos=0.15,dd=0.3,arr.side=3,endhead=TRUE) segmentarrow(elpos[7,],elpos[3,],arr.pos=0.15,dd=0.3,arr.side=3,endhead=TRUE) segmentarrow(elpos[7,],elpos[4,],arr.pos=0.15,dd=0.3,arr.side=3,endhead=TRUE) pin <- par ("pin") # size of plotting region, inches xx <- 0.2 yy <- xx*pin[1]/pin[2]*0.15 sx <- rep(xx,8) sx[7] <- 0.05 sy <- rep(yy,8) sy[6] <-yy*1.5 sy[7] <- sx[7]*pin[1]/pin[2] for (i in c(1:7)) straightarrow (to=elpos[i+1,],from=elpos [i,],lwd=2,arr.pos=0.6,endhead=TRUE) lab <- c("Problem","Conceptual model","Mathematical model","Parameterisation", "Mathematical solution","","OK?","Prediction, Analysis") for (i in c(1:5,8)) textround(elpos[i,],sx[i],sy[i],lab=lab[i]) textround(elpos[6,],xx,yy*1.5,lab=c("Calibration,sensitivity","Verification,validation")) textdiamond(elpos[7,],sx[7],sy[7],lab=lab[7]) textplain(c(0.7,elpos[2,2]),yy*2,lab=c("main components","relationships"),font=3,adj=c (0,0.5)) textplain(c(0.7,elpos[3,2]),yy ,"general theory",adj=c(0,0.5),font=3) textplain(c(0.7,elpos[4,2]),yy*2,lab=c("literature","measurements"),font=3,adj=c(0,0.5)) textplain(c(0.7,elpos[6,2]),yy*2,lab=c("field data","lab measurements"),font=3,adj=c(0,0.5)) 2009年11月22日日曜日
  31. 31. いったい何をしているのか... ✤ それぞれのノードとエッジを,サイズや位置を細かく指 定して書いている. ✤ これは大変... ✤ 書式さえ作っておけば後は埋めるだけ...ではない.テキス トに合わせて図形の大きさなどを調整する必要がある. 2009年11月22日日曜日
  32. 32. 結論 ✤ diagramパッケージを使うと綺麗なグラフが書けるよ! ✤ 隣接行列の形式には気をつけてね! ✤ あまり大規模なグラフの描写には向かないよ! ✤ RならigraphやRgraphvizを使ってね! 2009年11月22日日曜日
  33. 33. 補足説明 ✤ Rでグラフを扱うならigraph,Rgraphvizなどのパッケー ジが便利. ✤ あとは,RじゃないけどCytoscapeとか. ✤ 2009年11月22日日曜日
  34. 34. ありがとうございました 2009年11月22日日曜日

×