networkx.algorithms.planarity.PlanarEmbedding#

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

表示一个带有其平面嵌入的平面图。

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

Neighbor ordering

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

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

  • 边必须双向存在(因为边属性不同)

  • 每条边必须有一个 ‘cw’ 和 ‘ccw’ 属性,对应于正确的平面嵌入。

只要 PlanarEmbedding 无效,只应调用以下方法:

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

Half edges:

add_half_edge 等方法中使用了“半边”这一术语,这是在 双重连接边列表 中使用的术语。它用于强调边仅在一个方向上存在,并且存在另一个相反方向的半边。 虽然常规边总是有两个面(包括外表面)相邻,但可以为每个半边分配*恰好一个*面。对于半边 (u, v),其方向使得 u 在 v 下方,则属于 (u, v) 的面在该半边的右侧。

See also

is_planar

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

check_planarity

一种方便的方法来创建 PlanarEmbedding 。如果不是平面图,它返回一个显示这一点的子图。

Examples

创建一个星形图的嵌入(比较 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]#

初始化一个带有边、名称或图属性的图。

Parameters:
incoming_graph_data输入图(可选,默认:None)

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

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

以键=值对形式添加到图中的属性。

See also

convert

Examples

>>> G = nx.Graph()  # 或DiGraph, MultiGraph, MultiDiGraph等
>>> G = nx.Graph(name="我的图")
>>> e = [(1, 2), (2, 3), (3, 4)]  # 边列表
>>> G = nx.Graph(e)

可以分配任意图属性对(键=值)

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

Methods

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_nodeend_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()

返回一个迭代器,遍历所有节点的 (节点, 邻接字典) 元组。

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)

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

has_predecessor(u, v)

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

has_successor(u, v)

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

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 诱导的子图的子图视图。

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])

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

Attributes

adj

图邻接对象,存储每个节点的邻居信息。

degree

图的度视图,如 G.degree 或 G.degree()。

edges

DiGraph 的 OutEdgeView,即 G.edges 或 G.edges()。

in_degree

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

in_edges

图的入边视图,可以通过 G.in_edges 或 G.in_edges() 访问。

name

图的标识符字符串。

nodes

图的节点视图,表示为 G.nodesG.nodes()

out_degree

节点出度视图(node, out_degree)

out_edges

DiGraph 的 OutEdgeView,即 G.edges 或 G.edges()。

pred

图邻接对象,存储每个节点的前驱节点。

succ

图邻接对象,保存每个节点的后继节点。