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
相关产品推荐
相关产品推荐

