vis.jsライブラリを利用した、インタラクティブに拡大、縮小、移動やノードとエッジの追加、削除、結合などが可能な「visNetwork」パッケージを紹介します。
パッケージバージョン2.1.2。windows11のR version 4.2.2で確認しています。
パッケージのインストール
下記コマンドを実行してください。
#パッケージのインストール install.packages("visNetwork")
実行コマンドの紹介
Rstudio利用すると、コマンドでもプロットをhtmlファイルに保存することができます。<単純な使用例>の後に<装飾や編集可能な図の出力例>のコマンドを紹介します。
<単純な使用例>
本パッケージでは「ノード」と「エッジ」の2つのデータを準備する必要があります。理解しやすいように「ノードid1」に他の4つのノードと自身のエッジが結合する例を紹介します。出力結果と合わせて確認ください。詳細はコメントを確認してください。
#パケージの読み込み library("visNetwork") #単純な使用例 #ノードid1にすべてのエッジが結合 #nodesとedgesのデータが必要です #nodeデータの作成 nodes <- data.frame( #ノードid id = 1:5, #ノードラベル label = paste("node", 1:5)) #edgesデータの作成 edges <- data.frame( #エッジの始点 from = 1:10, #エッジの終点 to = 1, #エッジラベルの指定 label = paste("edge", 1:10)) #プロット visNetwork(nodes, edges) #プロットをhtmlファイルに保存 #htmlwidgets::saveWidgetコマンドを使用します #保存場所の指定 library("tcltk") setwd(paste(as.character(tkchooseDirectory(title = "保存場所を指定"), sep = "", collapse =""))) network <- visNetwork(nodes, edges) htmlwidgets::saveWidget(network, "network.html")
<装飾や編集可能な図の出力例>
「ノードやエッジの装飾を適応」、「ダイアログでノード周辺をハイライト」、「プロットをリアルタイムに編集」するコマンド例です。詳細はコメントを確認してください。
#装飾を適応したデータ参考例の作成 #nodeデータの作成 nodes <- data.frame(#ノードid id = 1:10, #ノードラベル label = paste("node", 1:10), #ノードグループ group = c("GrA", "GrB"), #シンボルサイズ value = 1:10, #ノードシンボルの設定 shape = c("square", "triangle", "box", "circle", "dot", "star", "ellipse", "database", "text", "diamond"), #ツールチップの指定 #ノードシンボルにカーソルを合わせると表示されます title = paste0("<<", 1:10,">>"), #色の設定 color = c("#e1e6ea", "#505457", "#4b61ba", "#a87963", "#deb7a0", "#d9bb9c", "#28231e", "#EEFFFF", "#EEE0FF", "#F6CEDF"), #影の設定 shadow = c(FALSE, TRUE, FALSE, TRUE, TRUE)) #edgesデータの作成 edges <- data.frame(#エッジの始点 from = sample(1:10,10), #エッジの終点 to = sample(1:10, 10), #エッジラベルの指定 label = paste("edge", 1:10), #エッジの長さを指定 length = c(200,500), #エッジ矢印の種類の指定 #"to", "from", "middle", "middle;to"の4種類の設定が可能です arrows = c("to", "from", "middle", "middle;to", "from"), #実線(TRUE)、破線(FALSE)の指定 dashes = c(TRUE, FALSE), #ツールチップの指定 #エッジラベルにカーソルを合わせると表示されます title = paste0("Color:", c("#e1e6ea", "#505457", "#4b61ba", "#a87963", "#deb7a0", "#d9bb9c", "#28231e", "#EEFFFF", "#EEE0FF", "#F6CEDF")), #スムージングの指定 smooth = c(FALSE, TRUE), #影の指定 shadow = c(FALSE, TRUE, FALSE, TRUE, TRUE)) #ノードやエッジの装飾を適応 network1 <- visNetwork(nodes, edges) #プロット network1 #プロットをhtmlファイルに保存 #なお、保存コマンドはRStudioで実行してください #保存場所の指定 library("tcltk") setwd(paste(as.character(tkchooseDirectory(title = "保存場所を指定"), sep = "", collapse =""))) htmlwidgets::saveWidget(network1, "network1.html") #ダイアログでノード周辺をハイライト network2 <- visNetwork(nodes, edges) %>% visOptions(highlightNearest = TRUE, nodesIdSelection = TRUE) #プロット network2 #プロットをhtmlファイルに保存 #保存場所の指定 library("tcltk") setwd(paste(as.character(tkchooseDirectory(title = "保存場所を指定"), sep = "", collapse =""))) htmlwidgets::saveWidget(network2, "network2.html") #プロットをリアルタイムに編集 network3 <- visNetwork(nodes, edges) %>% visOptions(manipulation = TRUE) #プロット network3 #プロットをhtmlファイルに保存 #保存場所の指定 library("tcltk") setwd(paste(as.character(tkchooseDirectory(title = "保存場所を指定"), sep = "", collapse =""))) htmlwidgets::saveWidget(network3, "network3.html")
出力例
・単純な使用例
・ノードやエッジの装飾を適応
・ダイアログでノード周辺をハイライト
・プロットをリアルタイムに編集
少しでも、あなたの解析が楽になりますように!!