You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言ndtv包render.d3movie()顶点标签与vertex_id不匹配问题

解决ndtv中render.d3movie标签与tooltip不匹配并替换自定义标签的问题

问题核心在于:render.d3movie默认显示的是顶点内置整数ID(vertex.id),而你通过vertex.TEA.names="vertex"添加的是动态属性(TEA),默认不会关联到标签显示;同时vertex.active仅返回当前时间点激活顶点的属性,导致tooltip长度与顶点总数不匹配,进而出现标签和tooltip错位。

解决方案1:使用动态属性作为标签并修正tooltip长度

直接指定vertex.label为当前时间点的自定义动态属性,同时确保tooltip覆盖所有顶点(包括未激活的),保证索引一致:

net <- networkDynamic(vertex.spells=vertexData[,c(2,3,4,1)],
                       edge.spells=edgeData[,c(3,4,6,7,5)],
                       create.TEAs=TRUE,
                       edge.TEA.names="weight",
                       vertex.TEA.names="vertex")

render.d3movie(net,
               displaylabels = TRUE,
               vertex.label = net %v% "vertex.active",  # 用自定义动态属性替换默认整数ID
               edge.lwd = (net %e% "weight.active")/10,
               # 为所有顶点生成tooltip,未激活时显示对应提示
               vertex.tooltip = sapply(net %v% "vertex.active", function(x) {
                 ifelse(is.na(x), "<b>Name:</b> 未激活", paste("<b>Name:</b>", x))
               })
)

解决方案2:使用静态顶点属性(属性不随时间变化时)

如果自定义标签是静态的,将其添加为网络的静态顶点属性,这样更稳定,避免动态属性的索引问题:

net <- networkDynamic(vertex.spells=vertexData[,c(2,3,4,1)],
                       edge.spells=edgeData[,c(3,4,6,7,5)],
                       create.TEAs=TRUE,
                       edge.TEA.names="weight",
                       vertex.TEA.names="vertex")

# 添加静态自定义标签属性(假设vertexData第一列是自定义名称)
network::set.vertex.attribute(net, "custom_name", vertexData[,1])

render.d3movie(net,
               displaylabels = TRUE,
               vertex.label = net %v% "custom_name",
               edge.lwd = (net %e% "weight.active")/10,
               vertex.tooltip = paste("<b>Name:</b>", net %v% "custom_name")
)

内容的提问来源于stack exchange,提问作者mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:55:52