Re: コマンドの一部修正 (HIGUCHI Koichi) KH Coder 旧掲示板
[ツリー表示] [留意事項] [ワード検索] [過去ログ]

  [No.909] Re: コマンドの一部修正 投稿者:HIGUCHI Koichi  投稿日:2012/02/14(Tue) 17:20:19
Re: コマンドの一部修正 (画像サイズ: 670×718 41kB)

こんにちは、樋口です。

最小スパニング・ツリーを表示する機能は、「共起ネットワーク」のオプショ
ンとして、KH Coderの次期バージョンに取り入れさせていただこうと考えてお
ります。今の所、添付の画面のような強調にする予定です。

ただ、次期バージョンの公開までにはまだ少し期間を要すると思いますので、
添付画面のような強調を行うための修正版Rコマンドを一応貼っておきます。

よろしかったらお使いください。

#---------------------------------------------------------------------
# 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) )
}
if (length(edg_width) == 1){
    edg_width <- rep(edg_width, ecount(n2) )
}

n2_edges  <- get.edgelist(n2,name=T);
mst_edges <- get.edgelist(mst,name=T);

for ( i in 1:ecount(n2) ){
    name_n2 <- paste(
        n2_edges[i,1],
        n2_edges[i,2]
    )
    for ( j in 1:ecount(mst) ){
        name_mst <- paste(
            mst_edges[j,1],
            mst_edges[j,2]
        )
        if ( name_n2 == name_mst ){
            edg_col[i]   <- "gray30"                   # edgeの色
            edg_width[i] <- 2                          # edgeの太さ
            if ( length(edg_lty) > 1 ){
                edg_lty[i] <- 1                        # edgeの線種
            }
            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") ) ],
        font = text_font,
        cex = f_size,
        col = "black"
    )
}
#---------------------------------------------------------------------


- 関連一覧ツリー (■ をクリックするとツリー全体を一括表示します)