R语言igraph绘图如何仅缩短右侧箭头连线的长度?
igraph 有向网络图右侧连线缩短修改方案
实现逻辑
你当前使用的layout_with_sugiyama生成的布局中,l$layout[,2]对应的是三层节点的水平位置:
- 取值1:最左侧的NMSUKU层节点
- 取值2:中间的TopLang层节点
- 取值3:最右侧的Ethnicity层节点
你原有代码通过修改取值为1的坐标压缩了左侧连线,要压缩右侧(中间层到最右层)的连线,只需修改取值为3的坐标,将最右层向中间层靠拢即可。
调整后完整代码
m <- as.matrix(replace(sample, sample == "", "NA")) g <- simplify(graph_from_edgelist(rbind(m[, 1:2], m[, 2:3]), directed = TRUE)) l <- layout_with_sugiyama(g) # 注释掉原来修改左侧的代码,若需同时保留左侧缩短效果可取消注释 # l$layout[, 2][l$layout[, 2] == 1] <- l$layout[, 2][l$layout[, 2] == 1] * 0.1 # 下方代码用于缩短右侧连线,末尾的0.2是缩放系数,数值越小连线越短 l$layout[, 2][l$layout[, 2] == 3] <- 2 + (l$layout[, 2][l$layout[, 2] == 3] - 2) * 0.2 plot(g, layout = -l$layout[, 2:1], edge.arrow.size = 0.1, vertex.size = 2.5, vertex.color = "grey", vertex.label.dist = 1, edge.arrow.width = 1.5, edge.width = seq(0.5, 0.08), edge.lty = "solid", edge.color = "gray", vertex.label.cex = 0.7, is.rm = TRUE, vertex.label.color = "black" )
参数说明
右侧连线的缩放系数可根据实际显示需求调整:比如将0.2改为0.5,就是把右侧连线缩短为原长度的一半;改为0.1就是缩短为原长度的10%。
内容的提问来源于stack exchange,提问作者Kian
相关产品推荐
相关产品推荐

