R语言visNetwork绘制有向网络图:箭头不显示问题排查
问题分析与解决
你的代码存在两个关键错误,导致箭头无法正常显示:
1. 边数据框的列赋值方式错误
创建edges数据框时,你使用了arrows <- "to",这是错误的列赋值逻辑。<-会将"to"赋值给全局环境的arrows变量,而非添加为边数据框的列——换句话说,你的边数据里根本没有arrows属性,visNetwork自然不会渲染箭头。
正确的写法是用=为边数据框创建列:
edges = data.frame( from = dat1$target, to = dat2$source, arrows = "to" # 用等号将"to"设为边数据框的arrows列值 )
2. 箭头类型的配置位置错误
arrows.to.type="arrow"不是边数据框的合法列名,这个参数属于visEdges()的全局配置项,而非边数据的字段。需要在绘制网络图时,通过visEdges()来指定箭头类型。
完整正确示例
# 构造节点数据(替换为你的实际节点数据) nodes <- data.frame(id = unique(c(dat1$target, dat2$source)), label = unique(c(dat1$target, dat2$source))) # 创建正确的边数据框 edges <- data.frame( from = dat1$target, to = dat2$source, arrows = "to" ) # 绘制带尖头箭头的有向图 visNetwork(nodes, edges) %>% visEdges(arrows = list(to = list(type = "arrow")))
如果需要给不同边设置不同箭头类型,也可以在边数据框里用列表形式单独定义:
edges <- data.frame( from = dat1$target, to = dat2$source, arrows = I(lapply(1:nrow(dat1), function(x) list(to = list(type = "arrow")))) ) visNetwork(nodes, edges)
内容的提问来源于stack exchange,提问作者sal13
相关产品推荐
相关产品推荐

