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()

###データ例の作成#####
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))
#正しく動くかTime1,4を調整
TestData[1:15, 2] <- TestData[1:15, 2] * 20
TestData[16:30, 5] <- TestData[16:30, 5] * 20
#######

#データの変形
MasterPlotData <- melt(TestData)
#項目数を取得
ItemNO <- unique(MasterPlotData[, 2])

#グラフの色
ColFill <- c("#a87963", "#4b61ba")

#グラフを連続出力
for(i in seq(ItemNO)){
  
  #データを抽出
  GplotData <- subset(MasterPlotData, MasterPlotData[, 2] == ItemNO[i])
  #BoxPlotを作成
  BoxPlot <- ggplot(GplotData, aes(x = Group, y = value, fill = Group)) +
    geom_boxplot(fill = ColFill, show.legend = FALSE)
  #一時フォルダにpngを出力
  ggsave(filename = paste0(as.integer(ItemNO[i]), ".jpeg"),
         plot = BoxPlot, path = tmp,
         width = 30, height = 30, units = "cm", dpi = 300)
  
}
#グラフデータ
edges <- data.frame(from = c("Time2","Time4","Time3","Time3","Time5"),
                    to = c("Time1","Time2","Time4","Time2","Time1"))
#ネットワークデータ化
g <- graph.data.frame(edges, directed = FALSE)
#ラベル情報を付与
V(g)$name <- names(as.list(V(g)))
###グラフを付与#####
#付与順を取得
NoPict <- as.integer(factor(names(as.list(V(g)))))
#付与
ImagePng <- paste0(tmp, "/", NoPict, ".jpeg")
#繰り返し処理
for(i in seq(ImagePng)){
  
  V(g)$raster[[i]] <- as.raster(image_scale(image_read(ImagePng[[i]]), "350x350"))
  
}
#ノードレイアウトの取得
Lay <- layout.reingold.tilford(g)
###プロット#####
#プロット領域の分割
par(mfrow = c(1, 2))
#プロット
plot(g, vertex.shape = "raster",
     vertex.size = 50, vertex.size2 = 50,
     edge.width = 2, layout = Lay,
     vertex.label.dist = 2.2)
#プロット2
plot(g, layout = Lay)

出力結果

igraph

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

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