Graph types#

NetworkX 提供用于存储图的数据结构和方法。

所有的 NetworkX 图类都允许(可哈希的)Python 对象作为节点,并且可以将任何 Python 对象分配为边属性。

图类的选择取决于您要表示的图的结构。

我应该使用哪种图类?#

Networkx 类

类型

允许自环

允许平行边

Graph

无向

DiGraph

有向

MultiGraph

无向

MultiDiGraph

有向

Basic graph types#

Note

NetworkX 使用 dicts 来存储图中的节点和邻居。 因此,基础图类的节点和边的报告可能不会在不同版本和平台之间保持一致; 然而,对于 CPython,3.6 之后的版本在各个平台和版本之间是一致的。

Graph Views#

图的视图:子图、反向、有向、无向。

在某些算法中,临时改变图以排除某些节点或边很方便。通过视图而不是移除再重新添加会更好。在其他算法中,临时改变图以反转有向边,或将有向图视为无向图等也很方便。本模块提供了这些图视图。

生成的视图本质上是只读图,从原始图对象报告数据。我们提供了一个属性 G._graph,指向底层图对象。

注意:由于图视图看起来像图,可能会形成视图链。要注意链,因为它们在嵌套约15层视图时会变得非常慢。对于从图类创建的节点诱导子图的常见简单情况,我们通过直接返回原始图的子图而不是子图的子图来缩短链。我们小心地不破坏中间子图中的任何边过滤器。一般来说,确定如何缩短链是棘手的,而且比诱导子图更难处理受限视图。

通常,使用 .copy() 来避免链是最简单的。

generic_graph_view(G[, create_using])

返回 G 的只读视图。

subgraph_view(G, *[, filter_node, filter_edge])

G 应用节点和边过滤器的视图。

reverse_view(G)

G 的边方向反转视图

Core Views#

核心数据结构的视图,例如嵌套映射(例如字典的字典)。 这些“视图”通常限制元素访问,整个视图或嵌套映射的层次可能是只读的。

AtlasView(d)

一个 AtlasView 是一个只读的映射的映射。

AdjacencyView(d)

AdjacencyView 是一个只读的映射的映射的映射。

MultiAdjacencyView(d)

一个MultiAdjacencyView是一个只读的映射的映射的映射的映射。

UnionAtlas(succ, pred)

两个只读的图集联合体(字典的字典)。

UnionAdjacency(succ, pred)

一个只读的由字典邻接关系组成的映射的映射的映射。

UnionMultiInner(succ, pred)

两个内部字典的只读联合体,用于多重邻接关系。

UnionMultiAdjacency(succ, pred)

两个字典 MultiAdjacencies 的只读联合体。

FilterAtlas(d, NODE_OK)

一个只读的映射集合,用于节点的过滤标准。

FilterAdjacency(d, NODE_OK, EDGE_OK)

一个只读的映射集合,包含节点和边的过滤条件。

FilterMultiInner(d, NODE_OK, EDGE_OK)

一个只读的映射集合,包含节点和边的过滤条件。

FilterMultiAdjacency(d, NODE_OK, EDGE_OK)

一个只读的映射集合,包含节点和边的过滤条件。

Filters#

Note

过滤器可以与视图一起使用,以限制视图(或扩展视图)。 它们可以过滤节点或过滤边。以下示例旨在帮助您构建新的过滤器。它们可能已经包含了您所需的所有过滤器。

过滤器工厂,用于隐藏或显示节点和边集合。

这些过滤器返回在创建 SubGraph 时使用的函数。

no_filter(*items)

返回一个始终评估为True的过滤函数。

hide_nodes(nodes)

返回一个过滤函数,用于隐藏特定节点。

hide_edges(edges)

返回一个过滤函数,用于隐藏特定的无向边。

hide_diedges(edges)

返回一个过滤函数,用于隐藏特定的有向边。

hide_multidiedges(edges)

返回一个过滤函数,用于隐藏特定的多向边。

hide_multiedges(edges)

返回一个过滤函数,用于隐藏特定的多重无向边。

show_nodes(nodes)

过滤器类,用于显示特定节点。

show_edges(edges)

返回一个过滤函数,用于显示特定的无向边。

show_diedges(edges)

返回一个过滤函数,用于显示特定的有向边。

show_multidiedges(edges)

返回一个过滤函数,用于显示特定的多向边。

show_multiedges(edges)

返回一个过滤函数,用于显示特定的多重无向边。