2016-04-16 13 views
1

クラスタを樹形図や色にラベルを追加 enter image description here enter image description hereは、私は、このように<code>ggdendro</code>を使用して系統樹を作成

マイネットワークは次のとおりです。

> dput(net) 
structure(list(77, FALSE, c(1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 11, 
11, 11, 11, 12, 13, 14, 15, 17, 18, 18, 19, 19, 19, 20, 20, 20, 
20, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 
23, 23, 23, 23, 23, 24, 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 
27, 27, 27, 28, 28, 29, 29, 29, 30, 31, 31, 31, 31, 32, 33, 33, 
34, 34, 35, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37, 37, 38, 38, 
38, 38, 38, 38, 39, 40, 41, 41, 42, 42, 42, 43, 43, 43, 44, 44, 
45, 47, 48, 48, 48, 48, 49, 49, 50, 50, 51, 51, 51, 52, 52, 53, 
54, 54, 54, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 57, 
57, 57, 58, 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 61, 61, 
61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 
63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 
65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, 
66, 67, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 70, 
70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 72, 
72, 72, 73, 74, 74, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 
76, 76, 76), c(0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 10, 3, 2, 0, 11, 
11, 11, 11, 16, 16, 17, 16, 17, 18, 16, 17, 18, 19, 16, 17, 18, 
19, 20, 16, 17, 18, 19, 20, 21, 16, 17, 18, 19, 20, 21, 22, 12, 
11, 23, 11, 24, 23, 11, 24, 11, 16, 25, 11, 23, 25, 24, 26, 11, 
27, 23, 27, 11, 23, 30, 11, 23, 27, 11, 11, 27, 11, 29, 11, 34, 
29, 34, 35, 11, 29, 34, 35, 36, 11, 29, 34, 35, 36, 37, 11, 29, 
25, 25, 24, 25, 41, 25, 24, 11, 26, 27, 28, 11, 28, 46, 47, 25, 
27, 11, 26, 11, 49, 24, 49, 26, 11, 51, 39, 51, 51, 49, 26, 51, 
49, 39, 54, 26, 11, 16, 25, 41, 48, 49, 55, 55, 41, 48, 55, 48, 
27, 57, 11, 58, 55, 48, 57, 48, 58, 59, 48, 58, 60, 59, 57, 55, 
55, 58, 59, 48, 57, 41, 61, 60, 59, 48, 62, 57, 58, 61, 60, 55, 
55, 62, 48, 63, 58, 61, 60, 59, 57, 11, 63, 64, 48, 62, 58, 61, 
60, 59, 57, 55, 64, 58, 59, 62, 65, 48, 63, 61, 60, 57, 25, 11, 
24, 27, 48, 41, 25, 68, 11, 24, 27, 48, 41, 25, 69, 68, 11, 24, 
27, 41, 58, 27, 69, 68, 70, 11, 48, 41, 25, 26, 27, 11, 48, 48, 
73, 69, 68, 25, 48, 41, 70, 71, 64, 65, 66, 63, 62, 48, 58), 
    c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 12, 11, 10, 14, 15, 16, 
    17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 
    32, 33, 34, 35, 36, 37, 38, 47, 46, 39, 40, 41, 42, 43, 44, 
    45, 49, 48, 52, 51, 50, 54, 55, 53, 56, 57, 58, 60, 59, 61, 
    62, 63, 66, 64, 65, 67, 69, 70, 71, 68, 72, 73, 74, 75, 76, 
    77, 79, 78, 82, 83, 80, 81, 87, 88, 84, 85, 86, 93, 94, 89, 
    90, 91, 92, 95, 96, 97, 98, 101, 100, 99, 102, 103, 104, 
    106, 105, 107, 108, 112, 110, 111, 109, 114, 113, 116, 115, 
    119, 118, 117, 121, 120, 122, 125, 124, 123, 131, 132, 133, 
    130, 128, 134, 135, 127, 126, 129, 136, 137, 139, 140, 138, 
    145, 143, 142, 141, 144, 148, 147, 149, 146, 150, 151, 152, 
    153, 158, 157, 154, 156, 155, 164, 162, 159, 163, 160, 161, 
    166, 165, 168, 174, 170, 171, 167, 173, 172, 169, 184, 177, 
    175, 183, 179, 182, 181, 180, 176, 178, 187, 194, 193, 189, 
    192, 191, 190, 188, 185, 186, 200, 196, 197, 203, 202, 198, 
    201, 195, 199, 204, 206, 207, 205, 208, 210, 209, 213, 214, 
    211, 215, 217, 216, 212, 221, 222, 218, 223, 224, 225, 220, 
    219, 230, 233, 226, 232, 231, 228, 227, 229, 236, 234, 235, 
    237, 238, 239, 242, 244, 243, 241, 240, 245, 246, 252, 253, 
    251, 250, 247, 248, 249), c(0, 1, 2, 4, 5, 6, 7, 8, 9, 13, 
    3, 12, 11, 10, 14, 15, 16, 17, 47, 49, 52, 54, 57, 62, 66, 
    69, 72, 73, 75, 77, 82, 87, 93, 102, 106, 112, 114, 119, 
    131, 145, 184, 206, 213, 221, 230, 236, 46, 18, 19, 21, 24, 
    28, 33, 39, 55, 132, 20, 22, 25, 29, 34, 40, 23, 26, 30, 
    35, 41, 27, 31, 36, 42, 32, 37, 43, 38, 44, 45, 48, 51, 58, 
    64, 67, 70, 50, 53, 60, 97, 101, 116, 207, 214, 222, 56, 
    59, 95, 96, 98, 100, 110, 133, 205, 211, 218, 233, 242, 61, 
    103, 113, 118, 125, 130, 234, 63, 65, 71, 74, 104, 111, 143, 
    208, 215, 223, 226, 235, 105, 107, 76, 79, 83, 88, 94, 68, 
    78, 80, 84, 89, 81, 85, 90, 86, 91, 92, 121, 128, 99, 134, 
    139, 164, 210, 217, 224, 232, 244, 108, 109, 135, 140, 142, 
    148, 150, 153, 162, 168, 177, 187, 200, 209, 216, 231, 237, 
    238, 243, 252, 115, 117, 124, 127, 136, 120, 122, 123, 126, 
    129, 137, 138, 141, 147, 158, 159, 174, 175, 194, 144, 149, 
    157, 163, 170, 183, 193, 204, 146, 151, 154, 160, 171, 179, 
    189, 196, 225, 253, 152, 156, 161, 167, 182, 192, 197, 155, 
    166, 173, 181, 191, 203, 165, 172, 180, 190, 202, 169, 176, 
    188, 198, 251, 178, 185, 201, 250, 186, 195, 247, 199, 248, 
    249, 212, 220, 228, 241, 219, 227, 240, 229, 245, 246, 239 
    ), c(0, 0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 10, 14, 15, 16, 17, 
    18, 18, 19, 21, 24, 28, 33, 39, 48, 50, 53, 57, 62, 64, 67, 
    68, 72, 73, 75, 77, 80, 84, 89, 95, 96, 97, 99, 102, 105, 
    107, 108, 108, 109, 113, 115, 117, 120, 122, 123, 126, 136, 
    138, 141, 146, 150, 153, 159, 167, 175, 185, 195, 204, 205, 
    211, 218, 226, 234, 237, 238, 240, 247, 254), c(0, 10, 10, 
    12, 13, 13, 13, 13, 13, 13, 13, 14, 46, 47, 47, 47, 47, 56, 
    62, 67, 71, 74, 76, 77, 83, 92, 105, 112, 124, 126, 131, 
    132, 132, 132, 132, 136, 139, 141, 142, 142, 144, 144, 153, 
    153, 153, 153, 153, 154, 155, 173, 178, 178, 182, 182, 182, 
    183, 192, 192, 200, 210, 217, 223, 228, 233, 237, 240, 242, 
    243, 243, 247, 250, 252, 253, 253, 254, 254, 254, 254), list(
     c(1, 0, 1), structure(list(), .Names = character(0)), 
     structure(list(id = c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
     11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 
     25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 
     39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 
     53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 
     67, 68, 69, 70, 71, 72, 73, 74, 75, 76), label = c("Myriel", 
     "Napoleon", "MlleBaptistine", "MmeMagloire", "CountessDeLo", 
     "Geborand", "Champtercier", "Cravatte", "Count", "OldMan", 
     "Labarre", "Valjean", "Marguerite", "MmeDeR", "Isabeau", 
     "Gervais", "Tholomyes", "Listolier", "Fameuil", "Blacheville", 
     "Favourite", "Dahlia", "Zephine", "Fantine", "MmeThenardier", 
     "Thenardier", "Cosette", "Javert", "Fauchelevent", "Bamatabois", 
     "Perpetue", "Simplice", "Scaufflaire", "Woman1", "Judge", 
     "Champmathieu", "Brevet", "Chenildieu", "Cochepaille", 
     "Pontmercy", "Boulatruelle", "Eponine", "Anzelma", "Woman2", 
     "MotherInnocent", "Gribier", "Jondrette", "MmeBurgon", 
     "Gavroche", "Gillenormand", "Magnon", "MlleGillenormand", 
     "MmePontmercy", "MlleVaubois", "LtGillenormand", "Marius", 
     "BaronessT", "Mabeuf", "Enjolras", "Combeferre", "Prouvaire", 
     "Feuilly", "Courfeyrac", "Bahorel", "Bossuet", "Joly", 
     "Grantaire", "MotherPlutarch", "Gueulemer", "Babet", 
     "Claquesous", "Montparnasse", "Toussaint", "Child1", 
     "Child2", "Brujon", "MmeHucheloup"), maincharacter = c(0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0)), .Names = c("id", "label", "maincharacter" 
     )), structure(list(value = c(1, 8, 10, 6, 1, 1, 1, 1, 
     2, 1, 1, 3, 3, 5, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 3, 3, 
     3, 4, 3, 3, 3, 3, 5, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 4, 
     4, 4, 2, 9, 2, 7, 13, 1, 12, 4, 31, 1, 1, 17, 5, 5, 1, 
     1, 8, 1, 1, 1, 2, 1, 2, 3, 2, 1, 1, 2, 1, 3, 2, 3, 3, 
     2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 1, 1, 
     2, 3, 2, 2, 1, 3, 1, 1, 3, 1, 2, 1, 2, 1, 1, 1, 3, 2, 
     1, 1, 9, 2, 2, 1, 1, 1, 2, 1, 1, 6, 12, 1, 1, 21, 19, 
     1, 2, 5, 4, 1, 1, 1, 1, 1, 7, 7, 6, 1, 4, 15, 5, 6, 2, 
     1, 4, 2, 2, 6, 2, 5, 1, 1, 9, 17, 13, 7, 2, 1, 6, 3, 
     5, 5, 6, 2, 4, 3, 2, 1, 5, 12, 5, 4, 10, 6, 2, 9, 1, 
     1, 5, 7, 3, 5, 5, 5, 2, 5, 1, 2, 3, 3, 1, 2, 2, 1, 1, 
     1, 1, 3, 5, 1, 1, 1, 1, 1, 6, 6, 1, 1, 2, 1, 1, 4, 4, 
     4, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 2, 
     2, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)), .Names = "value")), 
    <environment>), class = "igraph") 

縦軸にネットワークノードの名前があり、クラスタの行が同じであることを希望しますcluster_edge_betweennessで計算されたコミュニティの色です。

彼らはカラフルであれば、それは本当に問題ではありません:

  • ノード(ラベル)またはクラスタの
  • ラインまたは各クラスタの
  • 背景。

重要なことは、最初のプロット(丸いノードを使用)で行うことができるように、色に基づいてクラスターを区別できることです。

どうすればいいですか?私はインターネットを検索しましたが、解決できませんでした。私は最初から問題を抱えていたdendextend package

this post

  • 使用中のjlhoward応答以下

    1. : は、私はこれらの2つの道路の両方を追跡しようとした


      ありがとうどちらも。

      (1)応答でを、私はリスト(net)を持っている間dfは、データフレームである、と私は正確に例のようなデータフレームに自分のネットワークを変換する方法がわかりません。 私がしようととにかく場合、私は中

      エラーが出るrownames(df) <- V(net)$labelを行うには(単に再生する)row.names<-.data.frame*tmp*、値=値):長さ 'row.names' 容認できない

      ピタッ。 enter image description here

      それはnetネットワーク・ノードのラベルを使用しますが、dfネットワークのものとしていない。しかし、プロットされた結果がこれです。私は非常に奇妙に思えます。

      (2)これは私がやったことです:

      library(igraph) 
      library(GGally) 
      library(ggplot2) 
      library(ggdendro) 
      library(dendextend) 
      library(dendextendRcpp) 
      library(zoo) 
      
      # load dataset 
      net <- read.graph("./dataset/lesmiserables.gml", format = c("gml")) 
      deg <- igraph::degree(net, mode = "all") 
      
      comm <- fastgreedy.community(net) 
      
      comm_sizesComm <- sizes(comm) 
      comm_numComm <- length(comm_sizesComm) 
      comm_modularity <- modularity(comm) 
      
      # plot communities 
      colorsRainbow <- rainbow(max(membership(comm)), alpha = 0.6) 
      pdf(file = "./output/prova_comm2.pdf") 
      plot(net, 
          vertex.size = plotrix::rescale(deg, c(5, 16)), 
          vertex.color = colorsRainbow[membership(comm)], 
          vertex.frame.color = NA, 
          vertex.label.color = "black", 
          vertex.label.cex = 0.5, 
          vertex.size = 10, 
          edge.color = "#d8d8d8", 
          layout = layout.fruchterman.reingold, 
          edge.curved = FALSE) 
      dev.off() 
      
      # create dendrogram 
      dend <- as.dendrogram(comm) 
      
      cut <- comm_numComm 
      
      # change labels 
      dend <- dend %>% set("labels", V(net)$label) # change label 
      dend <- dend %>% set("labels_col", "black") # change color 
      dend <- dend %>% set("labels_cex", .5) # change size 
      
      # color label based on communities 
      colorsRainbow <- rainbow(max(membership(comm)), alpha = 1) 
      dend <- dend %>% set("labels_col", value = colorsRainbow, k = cut) 
      
      # plot dendrogram 
      pdf(file = "./output/prova_dend2.pdf") 
      plot(dend, 
          horiz = TRUE, 
          main = "Dendrogram") 
      dev.off() 
      

      を私はラベルを変更し、それらを着色するsucced。 しかし、2つのグラフの色が一致しません。プロットや樹状図の作成に問題があるかどうかはわかりません。

      を説明:最初のプロット(点で表されるノードを有するもの)で をI青色コミュニティ内のノード{パーペチュアル、Fantine、Anzelma、Simplice、...}が存在することがあります。イエローのコミュニティには{Woman2、Marius、Magnon、Cosette、...}があります。今、私は2番目のプロット(系統樹)を見に行く場合は

      は、私がWoman2Anzelmaノードが2つの異なる地域であることがわかります。 それは大きな問題のようで、私はどのように解決し始めるべきか分かりません。

      (3)私も試してみました:

      ggd1 <- as.ggdend(dend) 
      ggplot(ggd1) 
      

      を、問題は(2)と同じである:地域社会が一致していません。


      私はこの単純なグラフ作成:

      > dput(net) 
      structure(list(16, FALSE, c(1, 2, 3, 2, 3, 3, 4, 5, 5, 7, 7, 
      9, 8, 10, 9, 11, 11, 14, 15, 15, 15, 12, 14), c(0, 0, 0, 1, 2, 
      1, 3, 3, 4, 3, 6, 6, 7, 8, 8, 8, 10, 11, 14, 13, 12, 3, 1), c(0, 
      1, 3, 2, 5, 4, 6, 7, 8, 9, 10, 12, 11, 14, 13, 15, 16, 21, 22, 
      17, 20, 19, 18), c(0, 1, 2, 3, 5, 22, 4, 6, 7, 9, 21, 8, 10, 
      11, 12, 14, 13, 15, 16, 17, 20, 19, 18), c(0, 0, 1, 3, 6, 7, 
      9, 9, 11, 12, 14, 15, 17, 18, 18, 20, 23), c(0, 3, 6, 7, 11, 
      12, 12, 14, 15, 18, 18, 19, 20, 21, 22, 23, 23), list(c(1, 0, 
      1), structure(list(), .Names = character(0)), structure(list(
          id = c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 
          15), label = c("A", "B", "C", "D", "E", "F", "G", "H", "I", 
          "L", "M", "N", "O", "P", "Q", "R")), .Names = c("id", "label" 
      )), list()), <environment>), class = "igraph") 
      

      enter image description here

      をしてから、私はコミュニティや樹形図を見つける:

      # calculate degree 
      deg <- igraph::degree(net, mode = "all") 
      
      # find communities 
      com <- cluster_edge_betweenness(net) 
      ## or use 
      # com <- fastgreedy.community(net) 
      
      # details on communities 
      com_sizesCom <- sizes(com) 
      com_numCom <- length(com_sizesCom) 
      
      # create dendrogram 
      dend <- as.dendrogram(com) 
      labels(dend) <- V(net)$label[order.dendrogram(dend)] 
      
      k <- max(membership(com)) 
      colorsRainbow <- rainbow(k, alpha = 1) 
      
      set.seed(23420) 
      colorsRainbow <- rainbow(max(membership(com))) 
      colorsRainbow <- sample(colorsRainbow) 
      dend <- dend %>% set("labels_col", value = colorsRainbow, k = k) 
      dend <- dend %>% set("branches_k_color", value = colorsRainbow, k = k) 
      dend <- dend %>% set("labels_cex", 1) 
      

      私が手: enter image description here enter image description here

      色が正しくありません。


      完全なコードです。青と緑が切り替わります。

      library(igraph) 
      library(dendextend) 
      library(colorspace) 
      
      net <- upgrade_graph(net) 
      # dput(net) 
      
      # calculate degree 
      deg <- igraph::degree(net, mode = "all") 
      
      # plot network 
      x11() 
      plot(net, 
           vertex.size = plotrix::rescale(deg, c(8, 22)), 
           vertex.color = "tomato", 
           vertex.frame.color = NA, 
           vertex.label.color = "black", 
           vertex.size = 10, 
           edge.color = "#d8d8d8", 
           layout = layout.fruchterman.reingold, 
           edge.curved = FALSE) 
      
      # find communities 
      com <- cluster_edge_betweenness(net) 
      
      # details on communities 
      com_sizesCom <- sizes(com) 
      com_numCom <- length(com_sizesCom) 
      print(com_numCom) 
      
      # plot communities 
      colorsRainbow <- rainbow(max(membership(com)), alpha = 0.6) 
      x11() 
      par(mar = c(1, 1, 1, 1)) 
      plot(net, 
           vertex.size = plotrix::rescale(deg, c(8, 22)), 
           vertex.color = colorsRainbow[membership(com)], 
           vertex.frame.color = NA, 
           edge.color = "#d8d8d8", 
           vertex.label.color = "black", 
           layout = layout.fruchterman.reingold, 
           edge.curved = FALSE) 
      
      # create dendrogram 
      dend <- as.dendrogram(com) 
      labels(dend) <- V(net)$label[order.dendrogram(dend)] 
      
      k <- max(membership(com)) 
      colorsRainbow <- rainbow(k, alpha = 1) 
      
      colorsRainbow <- rev(unique(colorsRainbow[membership(com)[order.dendrogram(dend)]])) 
      dend <- dend %>% set("labels_col", value = colorsRainbow, k = k) 
      dend <- dend %>% set("branches_k_color", value = colorsRainbow, k = k) 
      dend <- dend %>% set("labels_cex", 1) 
      
      # plot dendrogram 
      x11() 
      par(mar = c(3, 1, 1, 5)) 
      plot(dend, horiz = T) 
      
  • +2

    あなたは[dendextendパッケージ](https://cran.r-project.org/web/packages/dendextend/を見たことがありますvignettes/introduction.html)。また、いくつかの色の樹状図[here](http://stackoverflow.com/questions/21474388/colorize-clusters-in-dendogram-with-ggplot2) –

    +0

    こんにちは@ marielle、あなたは(簡単に)ggdendroで色を追加することはできません。これは、dendextendパッケージのggdendオブジェクトの動機付けでした。 –

    +0

    @SandyMusprattありがとう、私はメインメッセージを編集する、私はあなたが私を助けることを願っています。 – marielle

    答えて

    0

    私は(私は彼らがネットワークから抽出されているかわからないと)私はラベルが正しく注文してしまったことを確認していないが、ここで再現性の例の試みです:

    library(igraph) 
    
    net <- structure(list(77, FALSE, c(1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 11, 
    11, 11, 11, 12, 13, 14, 15, 17, 18, 18, 19, 19, 19, 20, 20, 20, 
    20, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 
    23, 23, 23, 23, 23, 24, 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 
    27, 27, 27, 28, 28, 29, 29, 29, 30, 31, 31, 31, 31, 32, 33, 33, 
    34, 34, 35, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37, 37, 38, 38, 
    38, 38, 38, 38, 39, 40, 41, 41, 42, 42, 42, 43, 43, 43, 44, 44, 
    45, 47, 48, 48, 48, 48, 49, 49, 50, 50, 51, 51, 51, 52, 52, 53, 
    54, 54, 54, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 57, 
    57, 57, 58, 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 61, 61, 
    61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 
    63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 
    65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, 
    66, 67, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 70, 
    70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 72, 
    72, 72, 73, 74, 74, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 
    76, 76, 76), c(0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 10, 3, 2, 0, 11, 
    11, 11, 11, 16, 16, 17, 16, 17, 18, 16, 17, 18, 19, 16, 17, 18, 
    19, 20, 16, 17, 18, 19, 20, 21, 16, 17, 18, 19, 20, 21, 22, 12, 
    11, 23, 11, 24, 23, 11, 24, 11, 16, 25, 11, 23, 25, 24, 26, 11, 
    27, 23, 27, 11, 23, 30, 11, 23, 27, 11, 11, 27, 11, 29, 11, 34, 
    29, 34, 35, 11, 29, 34, 35, 36, 11, 29, 34, 35, 36, 37, 11, 29, 
    25, 25, 24, 25, 41, 25, 24, 11, 26, 27, 28, 11, 28, 46, 47, 25, 
    27, 11, 26, 11, 49, 24, 49, 26, 11, 51, 39, 51, 51, 49, 26, 51, 
    49, 39, 54, 26, 11, 16, 25, 41, 48, 49, 55, 55, 41, 48, 55, 48, 
    27, 57, 11, 58, 55, 48, 57, 48, 58, 59, 48, 58, 60, 59, 57, 55, 
    55, 58, 59, 48, 57, 41, 61, 60, 59, 48, 62, 57, 58, 61, 60, 55, 
    55, 62, 48, 63, 58, 61, 60, 59, 57, 11, 63, 64, 48, 62, 58, 61, 
    60, 59, 57, 55, 64, 58, 59, 62, 65, 48, 63, 61, 60, 57, 25, 11, 
    24, 27, 48, 41, 25, 68, 11, 24, 27, 48, 41, 25, 69, 68, 11, 24, 
    27, 41, 58, 27, 69, 68, 70, 11, 48, 41, 25, 26, 27, 11, 48, 48, 
    73, 69, 68, 25, 48, 41, 70, 71, 64, 65, 66, 63, 62, 48, 58), 
        c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 12, 11, 10, 14, 15, 16, 
        17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 
        32, 33, 34, 35, 36, 37, 38, 47, 46, 39, 40, 41, 42, 43, 44, 
        45, 49, 48, 52, 51, 50, 54, 55, 53, 56, 57, 58, 60, 59, 61, 
        62, 63, 66, 64, 65, 67, 69, 70, 71, 68, 72, 73, 74, 75, 76, 
        77, 79, 78, 82, 83, 80, 81, 87, 88, 84, 85, 86, 93, 94, 89, 
        90, 91, 92, 95, 96, 97, 98, 101, 100, 99, 102, 103, 104, 
        106, 105, 107, 108, 112, 110, 111, 109, 114, 113, 116, 115, 
        119, 118, 117, 121, 120, 122, 125, 124, 123, 131, 132, 133, 
        130, 128, 134, 135, 127, 126, 129, 136, 137, 139, 140, 138, 
        145, 143, 142, 141, 144, 148, 147, 149, 146, 150, 151, 152, 
        153, 158, 157, 154, 156, 155, 164, 162, 159, 163, 160, 161, 
        166, 165, 168, 174, 170, 171, 167, 173, 172, 169, 184, 177, 
        175, 183, 179, 182, 181, 180, 176, 178, 187, 194, 193, 189, 
        192, 191, 190, 188, 185, 186, 200, 196, 197, 203, 202, 198, 
        201, 195, 199, 204, 206, 207, 205, 208, 210, 209, 213, 214, 
        211, 215, 217, 216, 212, 221, 222, 218, 223, 224, 225, 220, 
        219, 230, 233, 226, 232, 231, 228, 227, 229, 236, 234, 235, 
        237, 238, 239, 242, 244, 243, 241, 240, 245, 246, 252, 253, 
        251, 250, 247, 248, 249), c(0, 1, 2, 4, 5, 6, 7, 8, 9, 13, 
        3, 12, 11, 10, 14, 15, 16, 17, 47, 49, 52, 54, 57, 62, 66, 
        69, 72, 73, 75, 77, 82, 87, 93, 102, 106, 112, 114, 119, 
        131, 145, 184, 206, 213, 221, 230, 236, 46, 18, 19, 21, 24, 
        28, 33, 39, 55, 132, 20, 22, 25, 29, 34, 40, 23, 26, 30, 
        35, 41, 27, 31, 36, 42, 32, 37, 43, 38, 44, 45, 48, 51, 58, 
        64, 67, 70, 50, 53, 60, 97, 101, 116, 207, 214, 222, 56, 
        59, 95, 96, 98, 100, 110, 133, 205, 211, 218, 233, 242, 61, 
        103, 113, 118, 125, 130, 234, 63, 65, 71, 74, 104, 111, 143, 
        208, 215, 223, 226, 235, 105, 107, 76, 79, 83, 88, 94, 68, 
        78, 80, 84, 89, 81, 85, 90, 86, 91, 92, 121, 128, 99, 134, 
        139, 164, 210, 217, 224, 232, 244, 108, 109, 135, 140, 142, 
        148, 150, 153, 162, 168, 177, 187, 200, 209, 216, 231, 237, 
        238, 243, 252, 115, 117, 124, 127, 136, 120, 122, 123, 126, 
        129, 137, 138, 141, 147, 158, 159, 174, 175, 194, 144, 149, 
        157, 163, 170, 183, 193, 204, 146, 151, 154, 160, 171, 179, 
        189, 196, 225, 253, 152, 156, 161, 167, 182, 192, 197, 155, 
        166, 173, 181, 191, 203, 165, 172, 180, 190, 202, 169, 176, 
        188, 198, 251, 178, 185, 201, 250, 186, 195, 247, 199, 248, 
        249, 212, 220, 228, 241, 219, 227, 240, 229, 245, 246, 239 
        ), c(0, 0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 10, 14, 15, 16, 17, 
        18, 18, 19, 21, 24, 28, 33, 39, 48, 50, 53, 57, 62, 64, 67, 
        68, 72, 73, 75, 77, 80, 84, 89, 95, 96, 97, 99, 102, 105, 
        107, 108, 108, 109, 113, 115, 117, 120, 122, 123, 126, 136, 
        138, 141, 146, 150, 153, 159, 167, 175, 185, 195, 204, 205, 
        211, 218, 226, 234, 237, 238, 240, 247, 254), c(0, 10, 10, 
        12, 13, 13, 13, 13, 13, 13, 13, 14, 46, 47, 47, 47, 47, 56, 
        62, 67, 71, 74, 76, 77, 83, 92, 105, 112, 124, 126, 131, 
        132, 132, 132, 132, 136, 139, 141, 142, 142, 144, 144, 153, 
        153, 153, 153, 153, 154, 155, 173, 178, 178, 182, 182, 182, 
        183, 192, 192, 200, 210, 217, 223, 228, 233, 237, 240, 242, 
        243, 243, 247, 250, 252, 253, 253, 254, 254, 254, 254), list(
         c(1, 0, 1), structure(list(), .Names = character(0)), 
         structure(list(id = c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
         11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 
         25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 
         39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 
         53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 
         67, 68, 69, 70, 71, 72, 73, 74, 75, 76), label = c("Myriel", 
         "Napoleon", "MlleBaptistine", "MmeMagloire", "CountessDeLo", 
         "Geborand", "Champtercier", "Cravatte", "Count", "OldMan", 
         "Labarre", "Valjean", "Marguerite", "MmeDeR", "Isabeau", 
         "Gervais", "Tholomyes", "Listolier", "Fameuil", "Blacheville", 
         "Favourite", "Dahlia", "Zephine", "Fantine", "MmeThenardier", 
         "Thenardier", "Cosette", "Javert", "Fauchelevent", "Bamatabois", 
         "Perpetue", "Simplice", "Scaufflaire", "Woman1", "Judge", 
         "Champmathieu", "Brevet", "Chenildieu", "Cochepaille", 
         "Pontmercy", "Boulatruelle", "Eponine", "Anzelma", "Woman2", 
         "MotherInnocent", "Gribier", "Jondrette", "MmeBurgon", 
         "Gavroche", "Gillenormand", "Magnon", "MlleGillenormand", 
         "MmePontmercy", "MlleVaubois", "LtGillenormand", "Marius", 
         "BaronessT", "Mabeuf", "Enjolras", "Combeferre", "Prouvaire", 
         "Feuilly", "Courfeyrac", "Bahorel", "Bossuet", "Joly", 
         "Grantaire", "MotherPlutarch", "Gueulemer", "Babet", 
         "Claquesous", "Montparnasse", "Toussaint", "Child1", 
         "Child2", "Brujon", "MmeHucheloup"), maincharacter = c(0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0)), .Names = c("id", "label", "maincharacter" 
         )), structure(list(value = c(1, 8, 10, 6, 1, 1, 1, 1, 
         2, 1, 1, 3, 3, 5, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 3, 3, 
         3, 4, 3, 3, 3, 3, 5, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 4, 
         4, 4, 2, 9, 2, 7, 13, 1, 12, 4, 31, 1, 1, 17, 5, 5, 1, 
         1, 8, 1, 1, 1, 2, 1, 2, 3, 2, 1, 1, 2, 1, 3, 2, 3, 3, 
         2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 1, 1, 
         2, 3, 2, 2, 1, 3, 1, 1, 3, 1, 2, 1, 2, 1, 1, 1, 3, 2, 
         1, 1, 9, 2, 2, 1, 1, 1, 2, 1, 1, 6, 12, 1, 1, 21, 19, 
         1, 2, 5, 4, 1, 1, 1, 1, 1, 7, 7, 6, 1, 4, 15, 5, 6, 2, 
         1, 4, 2, 2, 6, 2, 5, 1, 1, 9, 17, 13, 7, 2, 1, 6, 3, 
         5, 5, 6, 2, 4, 3, 2, 1, 5, 12, 5, 4, 10, 6, 2, 9, 1, 
         1, 5, 7, 3, 5, 5, 5, 2, 5, 1, 2, 3, 3, 1, 2, 2, 1, 1, 
         1, 1, 3, 5, 1, 1, 1, 1, 1, 6, 6, 1, 1, 2, 1, 1, 4, 4, 
         4, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 2, 
         2, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)), .Names = "value")), 
        "<environment>"), class = "igraph") 
    
    girvNew <- cluster_edge_betweenness(upgrade_graph(net)) 
    dend <- as.dendrogram(girvNew) 
    
    library(dendextend) 
    # hopefully this is correct, but I'm not sure. It assumes that 
    # V(net)$label has the order of the original data 
    labels(dend) <- V(net)$label[order.dendrogram(dend)] 
    
    plot(dend) 
    
    library(colorspace) 
    k <- max(membership(girvNew)) 
    colorsRainbow <- rainbow_hcl(k, alpha = 1) # [membership(girvNew)] 
    
    set.seed(23420) 
    colorsRainbow <- rainbow_hcl(max(membership(girvNew))) 
    colorsRainbow <- sample(colorsRainbow) 
    dend <- dend %>% set("labels_col", value = colorsRainbow, k = k) 
    dend <- dend %>% set("branches_k_color", value = colorsRainbow, k = k) 
    
    par(mar = c(3,1,1,5)) 
    plot(dend, horiz = T) 
    

    出力:ggplot2と

    enter image description here

    そして今:

    library(ggplot2) 
    ggplot(dend) # the same as: ggplot(as.ggdend(dend)) 
    # more work is needed for fixing the margins etc. 
    

    enter image description here

    更新コード:

    # dput(net) 
    net <- structure(list(16, FALSE, c(1, 2, 3, 2, 3, 3, 4, 5, 5, 7, 7, 
    9, 8, 10, 9, 11, 11, 14, 15, 15, 15, 12, 14), c(0, 0, 0, 1, 2, 
    1, 3, 3, 4, 3, 6, 6, 7, 8, 8, 8, 10, 11, 14, 13, 12, 3, 1), c(0, 
    1, 3, 2, 5, 4, 6, 7, 8, 9, 10, 12, 11, 14, 13, 15, 16, 21, 22, 
    17, 20, 19, 18), c(0, 1, 2, 3, 5, 22, 4, 6, 7, 9, 21, 8, 10, 
    11, 12, 14, 13, 15, 16, 17, 20, 19, 18), c(0, 0, 1, 3, 6, 7, 
    9, 9, 11, 12, 14, 15, 17, 18, 18, 20, 23), c(0, 3, 6, 7, 11, 
    12, 12, 14, 15, 18, 18, 19, 20, 21, 22, 23, 23), list(c(1, 0, 
    1), structure(list(), .Names = character(0)), structure(list(
        id = c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 
        15), label = c("A", "B", "C", "D", "E", "F", "G", "H", "I", 
        "L", "M", "N", "O", "P", "Q", "R")), .Names = c("id", "label" 
    )), list()), "<environment>"), class = "igraph") 
    
    
    library(igraph) 
    net <- upgrade_graph(net) 
    # calculate degree 
    deg <- degree(net, mode = "all") 
    
    # find communities 
    com <- cluster_edge_betweenness(net) 
    ## or use 
    # com <- fastgreedy.community(net) 
    
    # details on communities 
    com_sizesCom <- sizes(com) 
    com_numCom <- length(com_sizesCom) 
    
    
    # create dendrogram 
    dend <- as.dendrogram(com) 
    plot(dend) 
    library(dendextend) 
    labels(dend) <- V(net)$label[order.dendrogram(dend)] 
    plot(dend) 
    
    k <- max(membership(com)) 
    colorsRainbow <- rainbow(k, alpha = 1) 
    
    # colorsRainbow <- sample(colorsRainbow) 
    # dend <- rotate(dend, order(membership(comm))) 
    colorsRainbow <- rev(unique(colorsRainbow[membership(comm)[order.dendrogram(dend)]])) 
    dend <- dend %>% set("labels_col", value = colorsRainbow, k = k) 
    dend <- dend %>% set("branches_k_col", value = colorsRainbow, k = k) 
    dend <- dend %>% set("labels_cex", 1) 
    plot(dend) 
    

    enter image description here

    +0

    結果を確認しても正しく動作しません。 例えば、グラフ(ドット付き)は、赤いコミュニティに10人のメンバーがあることを示していますが、樹状図では、赤いコミュニティには3人のメンバーしかいません。 – marielle

    +0

    はるかに小さなネットワークを作成し、上から下に再現可能なコードを作成してください。これにより、トラブルシューティングをもっと簡単に行うことができます。 –

    +0

    お時間をありがとう。もっと分かりやすい例を作成しようとしたが、メインメッセージを変更した。 – marielle

    関連する問題