在Igraph 0.6中为Python 2.7(不适用于R)绘制尺寸/长度边缘

时间:2012-12-13 14:59:59

标签: python plot igraph edge

我似乎无法找到以下问题的解决方案:

我想按尺寸绘制边缘(长度,而不是宽度)。

我的意思是如果V1和V2顶点之间的边是一个等于20的值,我想将该边精确地绘制为20个像素。

如果V2和V3之间的另一条边是60,则图中的边将更长。

我找不到如何指定边缘大小或长度。也许用一个简单的代码行就不可能像其他属性一样用于绘图(顶点大小,颜色,宽度等) Igraph教程没有给出答案。可能很难。

即使固定边缘会给出一个恒定的形状,图形的形状方向也不重要。

图形是无向的,但有许多顶点和边缘序列。

1 个答案:

答案 0 :(得分:3)

igraph中没有边缘属性可以让你直接控制边缘的长度。主要原因是除非您的图形具有非常稀疏的结构和/或长度非常具体,否则完全满足所有长度约束是不可能的。

我唯一想到的是一种名为multidimensional scaling(MDS)的技术。在没有进入血腥细节的情况下,MDS的输入是 n x n 矩阵(其中 n 是图中顶点的数量)并且矩阵单元包含点之间的期望距离。 MDS的输出是顶点在一些较低维空间(通常是2D平面)中的排列,其中实际距离和期望距离之间的总平方差最小化。特别是,如果可以在2D空间中准确地满足所需距离,MDS将为您找到该配置。 igraph包含MDS作为layout_mds对象的Graph方法中的布局算法。

现在,抓住了。我提到距离矩阵的大小为 n x n 。问题是,这意味着您必须为每个顶点对规定距离,而不仅仅是连接的顶点对。我的印象是你的问题不是这种情况(即你只有连接的顶点对的距离),在这种情况下MDS是无用的,除非你能以某种方式“近似”断开的顶点对的距离 - 但在这种情况下布局也只是一个近似值。

另一种选择是Kamada-Kawai布局(参见Kamada,T。& Kawai,S。(1989)。一种绘制一般无向图的算法。信息处理快报 31 ,7-15),其中边缘被建模为弹簧,每个弹簧具有规定的平衡长度。布局将尝试以接近物理平衡的配置(在这种情况下所有弹簧长度接近其平衡长度,因此它们在其端点(即顶点)上不施加力)。这里的问题是igraph中的Kamada-Kawai布局不准备处理弹簧的不同平衡长度,即假设每个链节具有相同的“期望”长度。如果你愿意在Python中自己实现Kamada-Kawai布局,那么这可能是另一种可能性。