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
中添加带有指定权重属性的加权边返回一个遍历所有节点 (node, adjacency dict) 元组的迭代器。
如果此对象有效,则无异常运行。
clear
()从图中移除所有节点和边。
从图中移除所有边,但不改变节点。
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。
有效的 PlanarEmbedding 是无向的。
如果图是多重图,则返回 True;否则返回 False。
nbunch_iter
([nbunch])返回一个遍历 nbunch 中包含的且也在图中的节点的迭代器。
neighbors
(n)返回一个遍历节点 n 的后继节点的迭代器。
按顺时针顺序生成 v 的邻居。
next_face_half_edge
(v, w)返回一个面左侧的下一个半边。
number_of_edges
([u, v])返回两个节点之间的边数。
返回图中的节点数。
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_undirected
([reciprocal, as_view])返回有向图的无向表示。
返回用于创建空无向副本的类。
traverse_face
(v, w[, mark_half_edges])返回属于半边 (v, w) 的面上的节点。
update
([edges, nodes])使用节点/边/图作为输入更新图。
属性
持有每个节点邻居的图邻接对象。
图的 DegreeView,形式为 G.degree 或 G.degree()。
DiGraph 的 OutEdgeView,形式为 G.edges 或 G.edges()。
(节点, 入度) 的 InDegreeView 或单个节点的入度。
图的入边的视图,形式为 G.in_edges 或 G.in_edges()。
图的字符串标识符。
图的 NodeView,形式为 G.nodes 或 G.nodes()。
(节点, 出度) 的 OutDegreeView
DiGraph 的 OutEdgeView,形式为 G.edges 或 G.edges()。
持有每个节点前驱的图邻接对象。
持有每个节点后继的图邻接对象。