模块文档
igraph 库中与布局相关的代码。
此包包含 Layout
对象的实现。
类 |
|
表示图的布局。 |
函数 | _3d |
为给定的布局算法创建 3D 版本的别名。 |
函数 | _layout |
根据布局算法返回图的布局。 |
函数 | _layout |
根据图的简单拓扑属性选择并运行合适的布局函数。 |
函数 | _layout |
包装现有的布局方法,以确保它返回 Layout 而不是列表的列表。 |
函数 | _layout |
使用分层 Sugiyama 布局放置顶点。 |
变量 | _layout |
未归档 |
根据布局算法返回图的布局。
此处未指定的参数和关键字参数直接传递给布局算法。 有关这些参数的说明,请参阅布局算法的文档。
此方法理解的已注册布局名称是
- 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
)
参数 | |
图 | 未归档 |
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都传递给所选的布局函数(以防我们需要调用某些布局函数)。
参数 | |
图 | 未归档 |
*args | 未归档 |
**kwds | 未归档 |
dim | 指定我们是否要获取 2D 或 3D 布局。 |
返回值 | |
一个 Layout 对象。 |
def _layout_sugiyama(graph, layers=None, weights=None, hgap=1, vgap=1, maxiter=100, return_extended_graph=False): ¶
使用分层 Sugiyama 布局放置顶点。
这是一种分层布局,最适合有向无环图,尽管它也适用于无向或循环图。
每个顶点都被分配到一个层,每个层都放置在一条水平线上。 然后使用重心启发法对同一层内的顶点进行置换,该启发法尝试最小化边交叉。
将在跨越多个层的边上添加虚拟顶点。 因此,返回的布局包含的行数多于原始图中节点的数量; 额外的行对应于虚拟顶点。
参数 | |
图 | 未归档 |
layers | 一个向量,指定每个顶点的非负整数层索引,或者指定包含层索引的数字顶点属性的名称。 如果None, 将自动确定分层。 对于无向图,将提取一个生成树,并使用从具有最大度的节点开始的广度优先搜索将顶点分配到层。 对于有向图,通过反转 Eades、Lin 和 Smyth 的启发式算法中的边的方向来打破循环,然后使用最长路径分层将顶点放置在层中。 |
weights | 要使用的边权重。 可以是序列或可迭代对象,甚至可以是边属性名称。 |
hgap | 同一层中顶点之间的最小水平间隙。 |
vgap | 层之间的垂直间隙。 层索引将乘以 vgap 以获得 Y 坐标。 |
maxiter | 减少交叉步骤中要执行的最大迭代次数。 如果您觉得您获得的边交叉太多,请增加此值。 |
return | 指定还应返回带有添加的虚拟顶点的扩展图。 当这是True, 结果将是一个元组,包含布局和扩展图。 扩展图的前 |V| 个节点将对应于原始图的节点,其余节点是虚拟节点。 使用返回的布局和隐藏的虚拟节点绘制扩展图将产生类似于原始图的布局,但添加了边弯曲。 扩展图还包含一个名为_original_eid的边属性,该属性指定从中创建扩展图的边的原始图中的边的 ID。 |
返回值 | |
计算出的布局,它可能(并且通常会)具有比顶点数更多的行; 其余行对应于分层步骤中引入的虚拟节点。 当return_extended_graph是True, 它还将包含扩展图。 | |
未知字段:newfield | |
ref | 参考 |
未知字段:ref | |
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. |