ggraph中控制网络边绘制顺序失效问题排查
ggraph中控制网络边绘制顺序失效问题排查
嘿,我来帮你捋清楚这个ggraph边绘制顺序的问题!
你遇到的情况其实是因为ggraph的geom_edge_link()有个默认的自动排序行为——它并不会严格遵循你输入的边数据框(或igraph/tidygraph对象)里的原始顺序来绘制边,而plot.igraph()则是完全按照边的原始顺序渲染,所以两者表现出了差异。
具体来说,geom_edge_link()默认会根据边的起点、终点在布局后的坐标位置对边进行重排序,这么做是为了减少边之间的视觉重叠,但这就刚好打乱了你手动通过dplyr::arrange()设置的边顺序,导致你把ego.alter类型边排到前面,却没被画在最底层。
解决办法很简单:
只需要在geom_edge_link()里添加一个sort = FALSE参数,禁用它的自动排序逻辑,就能让ggraph严格按照你设定的边顺序来绘制了。
比如把你的代码修改成这样:
# 假设你原本的ggraph代码结构 ggraph(your_tidygraph_object) + geom_edge_link(aes(color = edge.type), sort = FALSE) + # 关键是加这个参数 geom_node_point() # 你的节点绘制代码
这样你提前排好序的ego.alter类型边就会被优先绘制(也就是在其他边的下方),完全符合你的预期。
另外补充一句:如果你使用的是geom_edge_path()这类其他边几何对象,它们默认也有类似的自动排序逻辑,同样可以通过sort = FALSE来解决顺序问题。
备注:内容来源于stack exchange,提问作者Raffaele Vacca
相关产品推荐
相关产品推荐

