networkx.algorithms.planarity.PlanarEmbedding#
- class PlanarEmbedding(incoming_graph_data=None, **attr)[源代码]#
表示平面图及其平面嵌入。
平面嵌入由 combinatorial embedding .
邻居排序:
与通常的图形结构相比,嵌入还存储每个顶点的所有相邻点的顺序。相邻的顺序可以是顺时针(CW)或逆时针(CCW)方向。这个顺序在底层的有向图中存储为边缘属性。对于边(u,v),沿顺时针方向将边属性“cw”设置为紧随v之后的u的邻居。
为了使planarembedding有效,它必须满足多个条件。可以用该方法检查这些条件是否满足
check_structure()
. 条件是:边缘必须向两个方向移动(因为边缘属性不同)
每个边必须有一个“cw”和“ccw”属性,该属性对应于正确的平面嵌入。
具有非零度的节点必须具有节点属性“first_nbr”。
只要planarembedding无效,只应调用以下方法:
尽管该图是nx.digraph的一个子类,但它仍然可以用于需要无向图的算法,因为该方法
is_directed()
被重写。这是可能的,因为有效的平面图必须在两个方向都有边。半边:
在方法上像
add_half_edge_ccw
the term "half-edge" is used, which is a term that is used in doubly connected edge lists . 它用来强调边缘只在一个方向上,而在相反方向上存在另一个半边缘。虽然常规边总是在其旁边有两个面(包括外表面),但可以指定每个半边 恰好一 面对。对于定向为u低于v的半边(u,v),则属于(u,v)的面位于该半边的右侧。实例
创建星型图的嵌入(比较
nx.star_graph(3)
):>>> G = nx.PlanarEmbedding() >>> G.add_half_edge_cw(0, 1, None) >>> G.add_half_edge_cw(0, 2, 1) >>> G.add_half_edge_cw(0, 3, 2) >>> G.add_half_edge_cw(1, 0, None) >>> G.add_half_edge_cw(2, 0, None) >>> G.add_half_edge_cw(3, 0, None)
或者,同样的嵌入也可以按逆时针方向定义。以下结果将产生完全相同的平面嵌入:
>>> G = nx.PlanarEmbedding() >>> G.add_half_edge_ccw(0, 1, None) >>> G.add_half_edge_ccw(0, 3, 1) >>> G.add_half_edge_ccw(0, 2, 3) >>> G.add_half_edge_ccw(1, 0, None) >>> G.add_half_edge_ccw(2, 0, None) >>> G.add_half_edge_ccw(3, 0, None)
创建图形后,可以验证planarembedding对象是否正确:
>>> G.check_structure()
- __init__(incoming_graph_data=None, **attr)#
用边、名称或图形属性初始化图形。
- 参数
- incoming_graph_data输入图形(可选,默认:无)
要初始化图形的数据。如果为None(默认),则创建一个空图。数据可以是边列表,也可以是任何NetworkX图形对象。如果安装了相应的可选Python包,则数据还可以是2D NumPy数组、SciPy稀疏矩阵或PyGraphviz图。
- attr关键字参数,可选(默认值=无属性)
要以键=值对的形式添加到图表中的属性。
参见
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_中的所有边添加到_add。
add_half_edge_ccw
(start_node, end_node, ...)添加从开始节点到结束节点的半边缘。
add_half_edge_cw
(start_node, end_node, ...)添加从开始节点到结束节点的半边缘。
add_half_edge_first
(start_node, end_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是无向的。
如果graph是多重图,则返回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])使用节点/边/图形作为输入更新图形。
属性
图形邻接对象,包含每个节点的邻居。
图形的degreeview,如g.degree或g.degree()。
有向图的outedgeview,如g.edges或g.edges()。
对于(节点,以度表示)或对于单个节点,以度表示的不一致视图。
图的一个线性视图,如g.in_edges或g.in_edges()。
图形的字符串标识符。
图形的节点视图,如g.nodes或g.nodes()。
(节点、出度)的Outdegreeview
有向图的outedgeview,如g.edges或g.edges()。
图形邻接对象,包含每个节点的前置任务。
包含每个节点的后续节点的图邻接对象。