R networkD3:单击操作显示节点数据帧的信息

Cod*_*oob 4 javascript networking r networkd3 htmlwidgets

我有这个代码:

library(networkD3)

# Load data
data(MisLinks)
data(MisNodes)

new.nodes <- MisNodes
new.nodes$var1 <- runif(nrow(MisNodes),1,2)
new.nodes$var2 <- runif(nrow(MisNodes),1,2)

# Some script to show the node index in the new.nodes data frame
script <- 'alert("row: " + (d.index + 1));'

# Plot
forceNetwork(Links = MisLinks, Nodes = new.nodes,
             Source = "source", Target = "target",
             Value = "value", NodeID = "name",
             Group = "group", opacity = 0.8,
             clickAction = script)
Run Code Online (Sandbox Code Playgroud)

我想通了通过询问来获取节点数据帧的行号d.index + 1。但是我想显示一个包含所有节点信息的表,如下所示(也许格式更好):

    name group size     var1     var2
1 Myriel     1   15 1.501311 1.053062
Run Code Online (Sandbox Code Playgroud)

这需要 JavaScript 能够访问节点数据帧,因为我对 JavaScript 的了解很少,所以我无法弄清楚如何请求这些数据。

CJ *_*man 5

发生这种情况的原因是该forceNetwork函数删除了传递给 JavaScript 的数据框中所有不必要的变量/列,这通常是有利的,但在本例中并非如此。您可以通过保存创建的 htmlwidget 对象来解决这个问题forceNetwork,然后添加回您需要访问的变量,然后“打印”/显示它。

library(networkD3)

data(MisLinks)
data(MisNodes)

MisNodes$var1 <- runif(nrow(MisNodes),1,2)

script <- 'alert("var1: " + (d.var1));'

fn <- forceNetwork(Links = MisLinks, Nodes = new.nodes, Source = "source", 
                   Target = "target", Value = "value", NodeID = "name", 
                   Group = "group", opacity = 0.8, clickAction = script)

fn$x$nodes$var1 <- MisNodes$var1

fn
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


这也可以使用多个变量来完成,例如......

library(networkD3)

data(MisLinks)
data(MisNodes)

MisNodes$var1 <- runif(nrow(MisNodes),1,2)
MisNodes$var2 <- runif(nrow(MisNodes),1,2)

script <- 'alert("var1: " + d.var1 + "\\n" + "var2: " + d.var2);'

fn <- forceNetwork(Links = MisLinks, Nodes = new.nodes, Source = "source", 
                   Target = "target", Value = "value", NodeID = "name", 
                   Group = "group", opacity = 0.8, clickAction = script)

fn$x$nodes$var1 <- MisNodes$var1
fn$x$nodes$var2 <- MisNodes$var2

fn
Run Code Online (Sandbox Code Playgroud)