Rでコマンド:ネットワークの描写は「igraph」パッケージがやっぱり便利です

Rの解析に役に立つ記事
スポンサーリンク

「igraph」パッケージを利用してNode画像を入れ替えるのにプロット座標を取得している記事を見かけますが、実は取得せずともNode画像を入れ替えることができます。

実行コマンドで「ggplot2」パッケージからグラフを作成して、Nodeにグラフ出力を適応するコマンドを紹介します。グラフは一時フォルダに作成していますので、電源を切ると削除しますのでご注意を。楽しいです、ネットワーク解析。「igraph」パッケージはいつかキチンと紹介したいと思います。

実行コマンドはwindows 7およびOS X 10.11.6のR version 3.3.1で確認しています。


スポンサーリンク

実行コマンド

詳細はコメント、各パッケージのヘルプを確認してください。

#パッケージのインストール
install.packages("igraph")
install.packages("ggplot2")
install.packages("reshape2")
install.packages("magick")

#パッケージの読み込み
library("igraph")
library("ggplot2")
library("reshape2")
library("magick")

#一時フォルダを取得
tmp <- tempdir()

###&#12487;&#12540;&#12479;&#20363;&#12398;&#20316;&#25104;#####
n <- 30
TestData <- data.frame(Group = sort(rep(c("Group1", "Group2"),
                                        each = n/2, len = n)),
                       Time1 = rnorm(n),
                       Time2 = rnorm(n),
                       Time3 = rnorm(n),
                       Time4 = rnorm(n),
                       Time5 = rnorm(n))
#&#27491;&#12375;&#12367;&#21205;&#12367;&#12363;Time1,4&#12434;&#35519;&#25972;
TestData[1:15, 2] <- TestData[1:15, 2] * 20
TestData[16:30, 5] <- TestData[16:30, 5] * 20
#######

#&#12487;&#12540;&#12479;&#12398;&#22793;&#24418;
MasterPlotData <- melt(TestData)
#&#38917;&#30446;&#25968;&#12434;&#21462;&#24471;
ItemNO <- unique(MasterPlotData[, 2])

#&#12464;&#12521;&#12501;&#12398;&#33394;
ColFill <- c("#a87963", "#4b61ba")

#&#12464;&#12521;&#12501;&#12434;&#36899;&#32154;&#20986;&#21147;
for(i in seq(ItemNO)){
  
  #&#12487;&#12540;&#12479;&#12434;&#25277;&#20986;
  GplotData <- subset(MasterPlotData, MasterPlotData[, 2] == ItemNO[i])
  #BoxPlot&#12434;&#20316;&#25104;
  BoxPlot <- ggplot(GplotData, aes(x = Group, y = value, fill = Group)) +
    geom_boxplot(fill = ColFill, show.legend = FALSE)
  #&#19968;&#26178;&#12501;&#12457;&#12523;&#12480;&#12395;png&#12434;&#20986;&#21147;
  ggsave(filename = paste0(as.integer(ItemNO[i]), ".jpeg"),
         plot = BoxPlot, path = tmp,
         width = 30, height = 30, units = "cm", dpi = 300)
  
}
#&#12464;&#12521;&#12501;&#12487;&#12540;&#12479;
edges <- data.frame(from = c("Time2","Time4","Time3","Time3","Time5"),
                    to = c("Time1","Time2","Time4","Time2","Time1"))
#&#12493;&#12483;&#12488;&#12527;&#12540;&#12463;&#12487;&#12540;&#12479;&#21270;
g <- graph.data.frame(edges, directed = FALSE)
#&#12521;&#12505;&#12523;&#24773;&#22577;&#12434;&#20184;&#19982;
V(g)$name <- names(as.list(V(g)))
###&#12464;&#12521;&#12501;&#12434;&#20184;&#19982;#####
#&#20184;&#19982;&#38918;&#12434;&#21462;&#24471;
NoPict <- as.integer(factor(names(as.list(V(g)))))
#&#20184;&#19982;
ImagePng <- paste0(tmp, "/", NoPict, ".jpeg")
#&#32368;&#12426;&#36820;&#12375;&#20966;&#29702;
for(i in seq(ImagePng)){
  
  V(g)$raster[[i]] <- as.raster(image_scale(image_read(ImagePng[[i]]), "350x350"))
  
}
#&#12494;&#12540;&#12489;&#12524;&#12452;&#12450;&#12454;&#12488;&#12398;&#21462;&#24471;
Lay <- layout.reingold.tilford(g)
###&#12503;&#12525;&#12483;&#12488;#####
#&#12503;&#12525;&#12483;&#12488;&#38936;&#22495;&#12398;&#20998;&#21106;
par(mfrow = c(1, 2))
#&#12503;&#12525;&#12483;&#12488;
plot(g, vertex.shape = "raster",
     vertex.size = 50, vertex.size2 = 50,
     edge.width = 2, layout = Lay,
     vertex.label.dist = 2.2)
#&#12503;&#12525;&#12483;&#12488;2
plot(g, layout = Lay)

出力結果

igraph

少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました