R/igraph技术问询:调整顶点上的边交汇点以绘制系谱图
解决igraph系谱图边汇聚的问题
我明白你想把系谱图里双亲到子代的分散边改成汇聚样式——这个需求在绘制家系图时太常见了!igraph默认的无向边绘制确实会让两条边看起来分开,不过我们可以通过调整边的弯曲参数轻松实现汇聚效果。
核心解决方案:调整edge.curved参数
igraph的plot()函数里的edge.curved参数可以控制边的弯曲方向和程度,我们可以利用它让两条边向中间靠拢,最终汇聚到子代节点的顶部。
下面是修改后的代码,直接替换你原来的plot语句即可:
library(igraph) ped <- data.frame(id=1:3, p1=c(0,0,1), p2=c(0,0,2), gen=c(0,0,1)) rel <- matrix(c(1,2,3,3), ncol=2) ped.graph <- graph.data.frame(rel, directed=F, ped) pos <- matrix(c(1,2,1.5,2,2,1), ncol=2) # 调整边弯曲度实现汇聚效果 plot(ped.graph, rescale=T, layout=pos, vertex.size=50, edge.curved = -0.2, # 负数让边向图中心弯曲,实现汇聚 edge.width = 2) # 可选:加宽边让汇聚效果更明显
参数细节说明
edge.curved = -0.2:负数表示边向图的中心方向弯曲,这样双亲(节点1、2)到子代(节点3)的两条边就会自然向中间靠拢,最终在子代节点处汇合。你可以根据图的大小调整这个数值(比如-0.1到-0.3之间),找到最贴合需求的弯曲度。- 如果需要为每条边单独设置弯曲度,可以传入一个向量,比如
edge.curved = c(-0.2, -0.2)(两条边用相同的弯曲度),效果和单个数值一致。
进阶优化(可选)
如果想要更贴近专业系谱图的样式,还可以添加这些设置:
- 设置顶点形状为方形:
vertex.shape = "square" - 统一边的颜色:
edge.color = "black" - 隐藏顶点标签(如果不需要):
vertex.label = NA
内容的提问来源于stack exchange,提问作者jnolen
相关产品推荐
相关产品推荐

