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_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
中添加指定权重属性的加权边返回一个迭代器,遍历所有节点的 (节点, 邻接字典) 元组。
如果此对象有效,则运行时不会出现异常。
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)返回 True 如果图包含节点 n。
has_predecessor
(u, v)返回 True 如果节点 u 有前驱节点 v。
has_successor
(u, v)返回 True 如果节点 u 有后继节点 v。
有效的 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
诱导的子图的子图视图。successors
(n)返回节点 n 的后继节点的迭代器。
to_directed
([as_view])返回图的有向表示。
返回用于空有向副本的类。
to_undirected
([reciprocal, as_view])返回有向图的无向表示。
返回用于空无向副本的类。
traverse_face
(v, w[, mark_half_edges])返回属于半边 (v, w) 的面上的节点。
update
([edges, nodes])使用节点/边/图作为输入更新图。
Attributes
图邻接对象,存储每个节点的邻居信息。
图的度视图,如 G.degree 或 G.degree()。
DiGraph 的 OutEdgeView,即 G.edges 或 G.edges()。
一个InDegreeView,用于(节点,入度)或单个节点的入度。
图的入边视图,可以通过 G.in_edges 或 G.in_edges() 访问。
图的标识符字符串。
图的节点视图,表示为
G.nodes
或G.nodes()
。节点出度视图(node, out_degree)
DiGraph 的 OutEdgeView,即 G.edges 或 G.edges()。
图邻接对象,存储每个节点的前驱节点。
图邻接对象,保存每个节点的后继节点。