こんにちは、樋口です。書き込みありがとうございます。
いえいえ、初心者の方には「マニアック」に見えようかと思いますが、少し手
慣れてきてRも触ってみてという段階の方には、なかなかおもしろいTipsにつ
ながる書き込みと思います。また私にとっても開発のヒントになります。いつ
もありがとうございます。
さて今回は、最小スパニング・ツリー(minimum spanning tree)の観点から、
重要とみられるedgeを検出し、それを赤色で表示するということですね。今回
もかなりおもしろそうと思います。
共起ネットワークを「R Source」形式で保存し、このファイルの末尾に以下を
付け加えて実行してください。色指定の部分は、お好きな色に変更していただ
けます。HTMLのカラーコードが使えます。 http://www.colordic.org/
また「edge.label」の箇所の「#」を削除すると、edgeのjaccard係数が表示さ
れます。確認用に使えるかもしれません。
#---------------------------------------------------------------------
# MSTの検出
mst <- minimum.spanning.tree(
n2,
weights = 1 - get.edge.attribute(n2, "weight"),
algorithm="prim"
)
# MSTに合致するedgeの色を赤く
if (length(edg_col) == 1){
edg_col <- rep(edg_col, ecount(n2) )
}
for ( i in 1:ecount(n2) ){
name_n2 <- paste(
get.edgelist(n2,name=T)[i,1],
get.edgelist(n2,name=T)[i,2]
)
for ( j in 1:ecount(mst) ){
name_mst <- paste(
get.edgelist(mst,name=T)[j,1],
get.edgelist(mst,name=T)[j,2]
)
if ( name_n2 == name_mst ){
edg_col[i] <- "#B22222" # ここで色指定
break
}
}
}
# プロット
plot.igraph(
n2,
vertex.label = "",
vertex.color =ccol,
vertex.frame.color =com_col_v,
vertex.size =v_size,
vertex.shape =v_shape,
edge.color =edg_col,
edge.lty =edg_lty,
edge.width =edg_width,
#edge.label =round( get.edge.attribute(n2, "weight"), 3),
#edge.label.cex =0.8,
layout =lay_f,
rescale =F
)
# 語のラベルを追加
lay_f_adj <- NULL
if (smaller_nodes ==1){
if ( is.null(lay_f_adj) == 1){
lay_f_adj <- cbind(lay_f_adj, lay_f[,1])
lay_f_adj <- cbind(lay_f_adj, lay_f[,2] + ( max(lay_f[,2]) - min(lay_f[,2]) ) / 38 )
}
text(
lay_f_adj,
labels = colnames(d)
[ as.numeric( get.vertex.attribute(n2,"name") ) ],
pos = 4,
offset = 0.25,
font = text_font,
cex = f_size,
col = "black"
)
} else {
text(
lay_f,
labels = colnames(d)
[ as.numeric( get.vertex.attribute(n2,"name") ) ],
#pos = 4,
#offset = 1,
font = text_font,
cex = f_size,
col = "black"
)
}
#---------------------------------------------------------------------
p.s.
些末なことながら、前から少し気になっていたのですが、「先生」と「さま」
はどちらか片方で十分かと思われます。両方付いていると、いかにも偉そうで
すし (^_^
|