如何使用 R 为多路复用网络中的边缘着色
Posted
技术标签:
【中文标题】如何使用 R 为多路复用网络中的边缘着色【英文标题】:How to colour edges in a multiplex network with R 【发布时间】:2022-01-16 08:32:49 【问题描述】:我目前正在根据自己创建的数据集分析多路复用网络。
我希望能够以一种我可以通过多路复用网络为两种类型的边缘分配不同颜色的方式绘制网络。
这个网络的边缘列表看起来像这样
多路复用网络称为 multi_g 它是一个 igraph 对象 两种类型的关系是贸易关系和双边援助关系 它们的边缘位于边缘列表的不同列中,因此位于分离的边缘属性中我尝试用以下代码绘制它:
plot(multi_g,
edge.color=c("brown", "green")[E(multi_g)$trade_tie+E(multi_g)$bilateralaid_tie],
edge.arrow.size = 0.5,
vertex.color="gray40",
vertex.label.color = "black",
layout= layout_with_fr)
通过使用这个公式,很多边都不会被绘制出来。
提前感谢您的帮助。
如果有办法用 ggraph 绘制它,我也会非常感激!
【问题讨论】:
您能解释一下您要做什么吗?你展示了一段你说没有做你想做的事情的代码,但你没有解释你想要发生的事情。在edge.color
行中,您似乎试图使用非整数索引向量,这是没有意义的。
See here 关于制作一个更易于人们帮助的可重现示例,例如可行的数据样本。现在我们看不到你的输出,所以不清楚你要修复什么
我投票决定重新开放,因为我完全可以理解 OP 的问题。 OP 实际上有两个网络,具有匹配的节点身份。 OP 希望在一个图中可视化两个网络,以便相同的节点位于相同的位置。 OP 想将贸易连接涂成棕色,将辅助连接涂成绿色。当 OP 绘制图形时,一些边缘不可见,因为边缘布局引擎可能将它们绘制在彼此之上。但是,OP 希望所有边缘都可见。
Here 是一种可能的解决方案,使用曲率使边缘路径相互偏移。然而,这确实有一些限制,正如 igraph 的维护者之一 @Tamas 所指出的 here。
【参考方案1】:
谢谢保罗!我能够使用您建议的曲线和 ifelse () 函数来告诉 R 何时为哪个边缘着色。
plot(multi_g,
edge.color=ifelse(E(multi_g)$trade_tie>0,"burlywood4","darkgreen"),
edge.arrow.size = 0.1,
edge.curved=0.3,
vertex.color=c('green','brown')[(V(trade_g)$`Export/Import`=="export")+1],
vertex.label.color = "black",
layout= layout_with_kk)
【讨论】:
干得好!你介意给我们看一张最终结果的照片吗?谢谢!以上是关于如何使用 R 为多路复用网络中的边缘着色的主要内容,如果未能解决你的问题,请参考以下文章