模块文档
igraph 库中与布局相关的代码。
此包包含 Layout
对象的实现。
类 |
|
表示图的布局。 |
函数 | _3d |
为给定布局算法的 3D 版本创建别名。 |
函数 | _layout |
根据布局算法返回图的布局。 |
函数 | _layout |
根据图的简单拓扑属性选择并运行合适的布局函数。 |
函数 | _layout |
封装现有布局方法,以确保它返回一个 Layout 对象而不是列表的列表。 |
函数 | _layout |
使用分层 Sugiyama 布局放置顶点。 |
变量 | _layout |
未文档化 |
为给定布局算法的 3D 版本创建别名。
此函数是一个装饰器,它创建一个方法,在附加 func 后调用该方法,dim=3到关键字参数列表。
参数 | |
func | 必须是 Graph 对象的一个方法。 |
返回 | |
一个新方法 |
根据布局算法返回图的布局。
此处未指定的参数和关键字参数将直接传递给布局算法。有关这些参数的解释,请参阅布局算法的文档。
此方法理解的注册布局名称包括:
- auto, automatic: 自动布局(参见
Graph.layout_auto
) - bipartite: 二分布局(参见
GraphBase.layout_bipartite
) - circle, circular: 圆形布局(参见
GraphBase.layout_circle
) - dh, davidson_harel: Davidson-Harel 布局(参见
GraphBase.layout_davidson_harel
) - drl: 适用于大型图的 DrL 布局(参见
GraphBase.layout_drl
) - drl_3d: 适用于大型图的 3D DrL 布局(参见
GraphBase.layout_drl
) - fr, fruchterman_reingold: Fruchterman-Reingold 布局(参见
GraphBase.layout_fruchterman_reingold
)。 - fr_3d, fr3d, fruchterman_reingold_3d: 3D Fruchterman-Reingold 布局(参见
GraphBase.layout_fruchterman_reingold
)。 - grid: 2D 常规网格布局(参见
GraphBase.layout_grid
) - grid_3d: 3D 常规网格布局(参见
GraphBase.layout_grid
) - graphopt: graphopt 算法(参见
GraphBase.layout_graphopt
) - kk, kamada_kawai: Kamada-Kawai 布局(参见
GraphBase.layout_kamada_kawai
) - kk_3d, kk3d, kamada_kawai_3d: 3D Kamada-Kawai 布局(参见
GraphBase.layout_kamada_kawai
) - lgl, large, large_graph: 大型图布局(参见
GraphBase.layout_lgl
) - mds: 多维缩放布局(参见
GraphBase.layout_mds
) - random: 随机布局(参见
GraphBase.layout_random
) - random_3d: 3D 随机布局(参见
GraphBase.layout_random
) - rt, tree, reingold_tilford: Reingold-Tilford 树形布局(参见
GraphBase.layout_reingold_tilford
) - rt_circular, reingold_tilford_circular: 圆形 Reingold-Tilford 树形布局(参见
GraphBase.layout_reingold_tilford_circular
) - sphere, spherical, circle_3d, circular_3d: 球面布局(参见
GraphBase.layout_circle
) - star: 星形布局(参见
GraphBase.layout_star
) - sugiyama: Sugiyama 布局(参见
Graph.layout_sugiyama
)
参数 | |
graph | 未文档化 |
layout | 要使用的布局。它可以是已注册的布局名称之一,也可以是一个可调用对象,该对象返回一个 Layout 对象或一个包含坐标的列表的列表。如果None,使用plotting.layout配置键的值。 |
*args | 未文档化 |
**kwds | 未文档化 |
返回 | |
一个 Layout 对象。 |
根据图的简单拓扑属性选择并运行合适的布局函数。
此函数尝试根据以下规则为图选择合适的布局函数:
- 如果图具有名为layout的属性,则将使用它。它可以是
Layout
实例、坐标对列表、布局函数的名称,或一个可调用函数,当以图作为参数调用时,该函数会生成布局。 - 否则,如果图具有名为x和y的顶点属性,则这些属性将用作布局中的坐标。当请求 3D 布局时(通过设置dim为 3),还需要一个名为z的顶点属性。
- 否则,如果图是连通的且最多有 100 个顶点,则将使用 Kamada-Kawai 布局(参见
GraphBase.layout_kamada_kawai()
)。 - 否则,如果图最多有 1000 个顶点,则将使用 Fruchterman-Reingold 布局(参见
GraphBase.layout_fruchterman_reingold()
)。 - 如果以上所有方法都失败了,将使用 DrL 布局算法(参见
GraphBase.layout_drl()
)。
此函数的所有参数,除了dim外,都将传递给所选的布局函数(如果我们必须调用某个布局函数)。
参数 | |
graph | 未文档化 |
*args | 未文档化 |
dim | 指定我们是希望获得 2D 布局还是 3D 布局。 |
返回 | |
一个 Layout 对象。 |
def _layout_sugiyama(graph, layers=None, weights=None, hgap=1, vgap=1, maxiter=100, return_extended_graph=False): (来源) ¶
使用分层 Sugiyama 布局放置顶点。
这是一种分层布局,最适合有向无环图,但它也适用于无向图或循环图。
每个顶点都被分配到一个层,每个层都放置在一条水平线上。然后使用重心启发式方法对同一层内的顶点进行排列,以尽量减少边的交叉。
在跨越多层的边上会添加虚拟顶点。因此,返回的布局包含的行数多于原始图中节点的数量;额外的行对应于虚拟顶点。
参考文献:
- K Sugiyama, S Tagawa, M Toda: Methods for visual understanding of hierarchical system structures. IEEE Systems, Man and Cybernetics 11(2):109-125, 1981.
- P Eades, X Lin and WF Smyth: A fast effective heuristic for the feedback arc set problem. Information Processing Letters 47:319-323, 1993.
参数 | |
graph | 未文档化 |
layers | 一个向量,指定每个顶点的非负整数层索引,或者一个包含层索引的数字顶点属性的名称。如果None,将自动确定分层。对于无向图,将提取一个生成树,并使用从度数最大的节点开始的广度优先搜索将顶点分配到层中。对于有向图,通过使用 Eades, Lin 和 Smyth 的启发式方法反转近似反馈弧集中的边方向来打破循环,然后使用最长路径分层将顶点放置在层中。 |
weights | 要使用的边权重。可以是序列、可迭代对象,甚至是边属性名称。 |
hgap | 同一层中顶点之间的最小水平间距。 |
vgap | 层之间的垂直间距。层索引将乘以 vgap 以获得 Y 坐标。 |
maxiter | 在交叉减少步骤中进行的最大迭代次数。如果您觉得边的交叉过多,请增加此值。 |
return | 指定是否也应返回包含添加的虚拟顶点的扩展图。当此值为True时,结果将是一个包含布局和扩展图的元组。扩展图的前 |V| 个节点将对应于原始图的节点,其余的是虚拟节点。使用返回的布局和隐藏的虚拟节点绘制扩展图将产生一个类似于原始图的布局,但增加了边的弯曲。扩展图还包含一个名为_original_eid的边属性,它指定了原始图中创建扩展图的边的 ID。 |
返回 | |
计算出的布局,它可能(并且通常会)比顶点数量拥有更多行;剩余的行对应于分层步骤中引入的虚拟节点。当return_extended_graph为True时,它还将包含扩展图。 |