2016-07-27 202 views
0

我正在使用visNetwork來可視化圖形,但我需要引入基於邊緣顏色的圖例。邊緣顏色依賴於邊緣屬性及其動態性質。我嘗試使用visGroups/visLegend,但得到了多個錯誤。 PFB可重現的例子。在visNetwork中爲邊緣顏色添加圖例

library(igraph) 
    library(visNetwork) 
    gg <- graph.atlas(711) 
    V(gg)$name=1:7 
    gg=set_edge_attr(gg,"Department",E(gg)[1:10],c("A","B","C","A","E","C","G","B","C","A")) 
    E(gg)$label=E(gg)$Department 
    F2 <- colorRampPalette(c("red", "blue","orange","violet","cyan"), bias = length(unique(E(gg)$Department)), space = "rgb", interpolate = "linear") 
    colCodes <- F2(length(unique(E(gg)$Department))) 
    edges_col <- sapply(E(gg)$Department,function(x) colCodes[which(sort(unique(E(gg)$Department)) == x)]) 
    E(gg)$color <-edges_col 
    datatest = toVisNetworkData(gg) 
    visNetwork(datatest$nodes,datatest$edges) %>% visIgraphLayout(layout="layout_in_circle") 

我需要傳說爲紅色 - A,藍 - Visual C等

請幫助。

+0

這是不可複製的:什麼是爲'VisNetworkData'功能? – Jason

+0

蘇里,我錯過了包括圖書館(visNetwork)。現在用例子添加它。 visNetworkData是一個將圖形頂點和節點轉換爲適用於visNetwork的格式的函數。 – hr02

回答

3

visLegend首先基於節點組,但您也可以手動設置節點和/或邊緣圖例。 (?visLegend

爲您例如:

# data.frame from edges legend 
ledges <- data.frame(color = unique(edges_col), 
        label = unique(names(edges_col))) 

visNetwork(datatest$nodes,datatest$edges) %>% visIgraphLayout(layout="layout_in_circle") %>% 
    visLegend(useGroups = F, addEdges = ledges) 
+0

謝謝。有效。 – hr02

+0

您應該接受幫助他人搜索相同問題的答案。 – vincentmajor