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")
出力例
・単純な使用例
・ノードやエッジの装飾を適応
・ダイアログでノード周辺をハイライト
・プロットをリアルタイムに編集
少しでも、あなたの解析が楽になりますように!!