networkx.algorithms.planarity.PlanarEmbedding#

class PlanarEmbedding(incoming_graph_data=None, **attr)[source]#

表示一个平面图及其平面嵌入。

平面嵌入由组合嵌入给出。

注意

check_planarity 是检查图是否为平面的首选方法。

邻居排序

与通常的图结构相比,嵌入还存储了每个顶点的所有邻居的顺序。邻居的顺序可以是顺时针 (cw) 方向或逆时针 (ccw) 方向。此顺序在底层有向图中存储为边属性。对于边 (u, v),边属性 'cw' 被设置为 u 的邻居,该邻居在顺时针方向上紧随 v 之后。

为了使 PlanarEmbedding 有效,它必须满足多个条件。可以使用方法 check_structure() 来检查这些条件是否满足。条件包括

  • 边必须是双向的(因为边属性不同)

  • 每条边必须有一个与其对应的 'cw' 和 'ccw' 属性,这些属性对应于正确的平面嵌入。

只要 PlanarEmbedding 无效,则只能调用以下方法

尽管该图是 nx.DiGraph 的子类,但它仍可用于需要无向图的算法,因为方法 is_directed() 已被重写。这是可能的,因为有效的 PlanarGraph 必须具有双向边。

半边

在诸如 add_half_edge 之类的方法中使用了术语“半边”,该术语用于双连边列表。它用于强调边仅沿一个方向,并且在相反方向上存在另一个半边。虽然常规边总是有两个面(包括外围面)紧邻它们,但可以为每个半边指定恰好一个面。对于方向为 u 在 v 下方的半边 (u, v),则属于 (u, v) 的面在此半边的右侧。

另请参阅

is_planar

检查现有图是否为平面的首选方法。

check_planarity

创建 PlanarEmbedding 的便捷方法。如果不是平面图,则返回显示此情况的子图。

示例

创建星图的嵌入(比较 nx.star_graph(3)

>>> G = nx.PlanarEmbedding()
>>> G.add_half_edge(0, 1)
>>> G.add_half_edge(0, 2, ccw=1)
>>> G.add_half_edge(0, 3, ccw=2)
>>> G.add_half_edge(1, 0)
>>> G.add_half_edge(2, 0)
>>> G.add_half_edge(3, 0)

或者,相同的嵌入也可以按照逆时针方向定义。以下结果与 PlanarEmbedding 完全相同

>>> G = nx.PlanarEmbedding()
>>> G.add_half_edge(0, 1)
>>> G.add_half_edge(0, 3, cw=1)
>>> G.add_half_edge(0, 2, cw=3)
>>> G.add_half_edge(1, 0)
>>> G.add_half_edge(2, 0)
>>> G.add_half_edge(3, 0)

创建图后,可以验证 PlanarEmbedding 对象是否正确

>>> G.check_structure()
__init__(incoming_graph_data=None, **attr)[source]#

使用边、名称或图属性初始化图。

参数:
incoming_graph_data输入图(可选,默认为 None)

用于初始化图的数据。如果为 None(默认值),则创建空图。数据可以是边列表,或任何 NetworkX 图对象。如果安装了相应的可选 Python 包,数据也可以是二维 NumPy 数组、SciPy 稀疏数组或 PyGraphviz 图。

attr关键字参数,可选(默认值 = 无属性)

要添加到图的属性,以 key=value 对形式。

另请参阅

convert

示例

>>> G = nx.Graph()  # or DiGraph, MultiGraph, MultiDiGraph, etc
>>> G = nx.Graph(name="my graph")
>>> e = [(1, 2), (2, 3), (3, 4)]  # list of edges
>>> G = nx.Graph(e)

可以分配任意图属性对(key=value)

>>> G = nx.Graph(e, day="Friday")
>>> G.graph
{'day': 'Friday'}

方法

add_edge(u_of_edge, v_of_edge, **attr)

在 u 和 v 之间添加一条边。

add_edges_from(ebunch_to_add, **attr)

添加 ebunch_to_add 中的所有边。

add_half_edge(start_node, end_node, *[, cw, ccw])

start_node 添加一条半边到 end_node

add_half_edge_ccw(start_node, end_node, ...)

从 start_node 添加一条半边到 end_node。

add_half_edge_cw(start_node, end_node, ...)

从 start_node 添加一条半边到 end_node。

add_half_edge_first(start_node, end_node)

添加一条半边,并将 end_node 设置为 start_node 的最左侧邻居。

add_node(node_for_adding, **attr)

添加单个节点 node_for_adding 并更新节点属性。

add_nodes_from(nodes_for_adding, **attr)

添加多个节点。

add_weighted_edges_from(ebunch_to_add[, weight])

ebunch_to_add 中添加带有指定权重属性的加权边

adjacency()

返回一个遍历所有节点 (node, adjacency dict) 元组的迭代器。

check_structure()

如果此对象有效,则无异常运行。

clear()

从图中移除所有节点和边。

clear_edges()

从图中移除所有边,但不改变节点。

connect_components(v, w)

在某个位置添加 (v, w) 和 (w, v) 的半边。

copy([as_view])

返回图的副本。

edge_subgraph(edges)

返回由指定边导出的子图。

get_data()

将邻接结构转换为更易读的结构。

get_edge_data(u, v[, default])

返回与边 (u, v) 关联的属性字典。

has_edge(u, v)

如果边 (u, v) 在图中,则返回 True。

has_node(n)

如果图中包含节点 n,则返回 True。

has_predecessor(u, v)

如果节点 u 有前驱节点 v,则返回 True。

has_successor(u, v)

如果节点 u 有后继节点 v,则返回 True。

is_directed()

有效的 PlanarEmbedding 是无向的。

is_multigraph()

如果图是多重图,则返回 True;否则返回 False。

nbunch_iter([nbunch])

返回一个遍历 nbunch 中包含的且也在图中的节点的迭代器。

neighbors(n)

返回一个遍历节点 n 的后继节点的迭代器。

neighbors_cw_order(v)

按顺时针顺序生成 v 的邻居。

next_face_half_edge(v, w)

返回一个面左侧的下一个半边。

number_of_edges([u, v])

返回两个节点之间的边数。

number_of_nodes()

返回图中的节点数。

order()

返回图中的节点数。

predecessors(n)

返回一个遍历节点 n 的前驱节点的迭代器。

remove_edge(u, v)

移除 u 和 v 之间的边。

remove_edges_from(ebunch)

移除 ebunch 中指定的所有边。

remove_node(n)

移除节点 n。

remove_nodes_from(nodes)

移除多个节点。

reverse([copy])

返回图的反向图。

set_data(data)

根据给定的已排序邻居列表插入边。

size([weight])

返回边数或所有边权重的总和。

subgraph(nodes)

返回在 nodes 上导出的子图的 SubGraph 视图。

successors(n)

返回一个遍历节点 n 的后继节点的迭代器。

to_directed([as_view])

返回图的有向表示。

to_directed_class()

返回用于创建空有向副本的类。

to_undirected([reciprocal, as_view])

返回有向图的无向表示。

to_undirected_class()

返回用于创建空无向副本的类。

traverse_face(v, w[, mark_half_edges])

返回属于半边 (v, w) 的面上的节点。

update([edges, nodes])

使用节点/边/图作为输入更新图。

属性

adj

持有每个节点邻居的图邻接对象。

degree

图的 DegreeView,形式为 G.degree 或 G.degree()。

edges

DiGraph 的 OutEdgeView,形式为 G.edges 或 G.edges()。

in_degree

(节点, 入度) 的 InDegreeView 或单个节点的入度。

in_edges

图的入边的视图,形式为 G.in_edges 或 G.in_edges()。

name

图的字符串标识符。

nodes

图的 NodeView,形式为 G.nodes 或 G.nodes()。

out_degree

(节点, 出度) 的 OutDegreeView

out_edges

DiGraph 的 OutEdgeView,形式为 G.edges 或 G.edges()。

pred

持有每个节点前驱的图邻接对象。

succ

持有每个节点后继的图邻接对象。