2017-08-17 90 views
1

试图获取节点标签仅显示在已选择的节点上。我发现a similar question只想显示悬停时的边缘标签。解决的办法是这样的:visNetwork + R:仅显示选定的节点标签

nodes <- data.frame(id = 1:3, label = 1:3) 
edges <- data.frame(from = c(1,2), to = c(1,3), label = "Edge label", font.size = 0) 
visNetwork(nodes, edges) %>% 
    visInteraction(hover = T) %>% 
    visEvents(hoverEdge = "function(e){ 
    this.body.data.edges.update({id: e.edge, font: {size : 14}}); 
    }") %>% 
    visEvents(blurEdge = "function(e){ 
    this.body.data.edges.update({id: e.edge, font: {size : 0}}); 
    }") 

我试图修改此,但我不认为我做的JavaScript部分正确的,我知道JS几乎在所有。

nodes <- data.frame(id = 1:3, label = 1:3) 
edges <- data.frame(from = c(1,2), to = c(1,3), label = "Edge label", font.size = 0) 
visNetwork(nodes, edges) %>% 
    visInteraction(hover = T) %>% 
    visEvents(selectNode= "function(e){ 
    this.body.data.nodes.update({id: e.node, font: {size : 14}}); 
    }") %>% 
    visEvents(deselectNode= "function(e){ 
    this.body.data.nodes.update({id: e.node, font: {size : 0}}); 
    }") 

这反而会导致每次选择或取消选择节点时都会创建一个新节点。虽然坐着点击它们是一个有趣的方式,我的Rsession崩溃,但不幸的是还没有解决我的问题。

我相信这是一个简单的修复,但我已经通过visNetwork文档,我只是没有找到我所需要的。帮助赞赏!

+0

您是否试图在一个闪亮的应用程序中完成此操作,或者您只是创建一个HTML小部件? – kostr

+0

只是一个HTML小部件。我发布的代码就是我正在使用的所有代码。 – jamzsabb

+0

看来,有人把这个问题添加到github:https://github.com/datastorm-open/visNetwork/issues/195 – kostr

回答

1

这应该可以做到。这个JS实际上是根据数据框中的两个标签创建一个变量。我确信有一个更技术性的方法来做到这一点,但它应该仍然工作得很好。

library(visNetwork) 


nodes <- data.frame(id = 1:3, label = paste0(""), label_long = c('Label 1','Label 2','Label 3')) 
edges <- data.frame(from = c(1,2), to = c(1,3), label = "Edge label", font.size = 0) 

net <- visNetwork(nodes, edges) %>% 
    visInteraction(hover = T) %>% 
    visEvents(selectNode = "function(e){ 
      var label_info = this.body.data.nodes.get({ 
      fields: ['label', 'label_long'], 
      filter: function (item) { 
      return item.id === e.node 
      }, 
      returnType :'Array' 
      }); 
      this.body.data.nodes.update({id: e.node, label : label_info[0].label_long, label_long : label_info[0].label}); 
      }") %>% 
    visEvents(blurNode = "function(e){ 
      var label_info = this.body.data.nodes.get({ 
      fields: ['label', 'label_long'], 
      filter: function (item) { 
      return item.id === e.node 
      }, 
      returnType :'Array' 
      }); 
      this.body.data.nodes.update({id: e.node, label : label_info[0].label_long, label_long : label_info[0].label}); 
    }") 

print(net) 
+0

这非常接近,但它会在选择节点时显示标签,但在取消选择时会保留标签。这真的很接近,谢谢! – jamzsabb