【问题标题】:visNetwork + R: show node labels only on selectvisNetwork + R:仅在选择时显示节点标签
【发布时间】:2017-08-17 16:28:15
【问题描述】:

试图让节点标签仅显示在已选择的节点上。

我发现a similar question 只想在悬停时显示边缘标签。解决方案是这样的:

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 文档,只是找不到我需要的东西。感谢您的帮助!

【问题讨论】:

  • 您是想在闪亮的应用程序中完成此任务,还是只是创建一个 HTML 小部件?
  • 只是一个 HTML 小部件。我发布的代码就是我正在使用的所有代码。
  • 似乎有人将此问题添加到github:github.com/datastorm-open/visNetwork/issues/195
  • 是的,就是我,我意识到 SO 上没有很多 visNetwork 活动,所以去找源头。我会在这两个地方发布我提出的任何答案

标签: javascript r visnetwork


【解决方案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)

【讨论】:

  • 确实很接近,但是它使标签在节点被选中时出现,但在取消选中时保持不变。不过,这真的很接近,谢谢!
猜你喜欢
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 2018-04-17
  • 2018-04-26
  • 2018-06-14
  • 1970-01-01
  • 2017-09-13
  • 2015-01-16
相关资源
最近更新 更多