Python 如何正确使用方法nx.check\u networkx的平面性?
我想要什么? 我有一个有很多顶点和很多边的图。顶点是协调的。 我试图检查图形的平面性,我总是得到真实的答案 示例 下面是一个小例子:Python 如何正确使用方法nx.check\u networkx的平面性?,python,matplotlib,graph,networkx,Python,Matplotlib,Graph,Networkx,我想要什么? 我有一个有很多顶点和很多边的图。顶点是协调的。 我试图检查图形的平面性,我总是得到真实的答案 示例 下面是一个小例子: pos = {1: (0, 0), 2: (0, 1), 3: (1, 1), 4: (1, 0)} G = nx.Graph().to_undirected() G.add_nodes_from(pos) G.add_edge(1, 3, weight=1) G.add_edge(2, 4, weight=1) G.add
pos = {1: (0, 0), 2: (0, 1), 3: (1, 1), 4: (1, 0)}
G = nx.Graph().to_undirected()
G.add_nodes_from(pos)
G.add_edge(1, 3, weight=1)
G.add_edge(2, 4, weight=1)
G.add_edge(2, 3, weight=1)
print(nx.check_planarity(G, False))
nx.draw_networkx(G, with_labels=True, pos=pos)
plt.show()
输出为:
(True, <networkx.algorithms.planarity.PlanarEmbedding object at 0x07CD3E30>)
(正确,)
您可以清楚地看到,图形不是平面性的,但是结果仍然是True
我在做什么?请注意,如果一个图形可以在欧几里德平面上绘制而没有任何边交点,那么它就是平面的。
在您的情况下,图形是平面的,因为交换节点1和4就足以避免边缘相交。
但是,如果你考虑一个完整的图(一个完整的图<代码> kn < /代码>是平面的,只适用于<代码> n。≤ 4)您可以看到差异
>>> K4 = nx.complete_graph(4)
>>> nx.check_planarity(K4)
(True, <networkx.algorithms.planarity.PlanarEmbedding object at 0x1035df1d0>)
>>> K5 = nx.complete_graph(5)
>>> nx.check_planarity(K5)
(False, None)
>K4=nx.完整图(4)
>>>nx.检查平面度(K4)
(对,)
>>>K5=nx.完整的图(5)
>>>nx.检查平面度(K5)
(错,无)
请注意,如果图形可以在欧几里德平面上绘制,且没有任何边交点,则图形是平面的。在您的情况下,图形是平面的,因为交换节点1和4就足以避免边缘相交。
但是,如果你考虑一个完整的图(一个完整的图<代码> kn < /代码>是平面的,只适用于<代码> n。≤ 4)您可以看到差异
>>> K4 = nx.complete_graph(4)
>>> nx.check_planarity(K4)
(True, <networkx.algorithms.planarity.PlanarEmbedding object at 0x1035df1d0>)
>>> K5 = nx.complete_graph(5)
>>> nx.check_planarity(K5)
(False, None)
>K4=nx.完整图(4)
>>>nx.检查平面度(K4)
(对,)
>>>K5=nx.完整的图(5)
>>>nx.检查平面度(K5)
(错,无)
您可以使用检查平面度的答案来绘制可能的平面布局
import networkx as nx
import matplotlib.pyplot as plt
pos = {1: (0, 0), 2: (0, 1), 3: (1, 1), 4: (1, 0)}
G = nx.Graph().to_undirected()
G.add_nodes_from(pos)
G.add_edge(1, 3, weight=1)
G.add_edge(2, 4, weight=1)
G.add_edge(2, 3, weight=1)
is_planar, G2 = nx.check_planarity(G, False)
print(is_planar)
# plotting
fig = plt.figure()
ax = fig.add_subplot(121)
ax = plt.gca()
ax.margins(0.20)
nx.draw_networkx(G, with_labels=True, pos=pos)
ax = fig.add_subplot(122)
ax = plt.gca()
ax.margins(0.20)
nx.draw_networkx(G2, with_labels=True)
plt.show()
您可以使用检查平面性的答案来绘制可能的平面布局
import networkx as nx
import matplotlib.pyplot as plt
pos = {1: (0, 0), 2: (0, 1), 3: (1, 1), 4: (1, 0)}
G = nx.Graph().to_undirected()
G.add_nodes_from(pos)
G.add_edge(1, 3, weight=1)
G.add_edge(2, 4, weight=1)
G.add_edge(2, 3, weight=1)
is_planar, G2 = nx.check_planarity(G, False)
print(is_planar)
# plotting
fig = plt.figure()
ax = fig.add_subplot(121)
ax = plt.gca()
ax.margins(0.20)
nx.draw_networkx(G, with_labels=True, pos=pos)
ax = fig.add_subplot(122)
ax = plt.gca()
ax.margins(0.20)
nx.draw_networkx(G2, with_labels=True)
plt.show()
那么,知道在具有协调节点的图中是否存在边交点的最佳方法是什么,如我的示例中所示?即使使用固定的节点位置,如果更改边(1,3)的绘制方式并使其成为曲线,也将避免边交点。因此,你的问题似乎有所不同。如果给定固定节点的位置并假设边绘制为直线,则需要检查是否存在任何两条边的交点。因此,它似乎与平面度检查没有太大关系。那么,知道在具有协调节点的图形中是否存在边交点的最佳方法是什么,如我的示例中所示?即使节点位置已固定,例如,如果更改边(1,3)的绘制方式并使其成为曲线,也将避免边交点。因此,你的问题似乎有所不同。如果给定固定节点的位置并假设边绘制为直线,则需要检查是否存在任何两条边的交点。因此,它似乎与平面度检查没有多大关系。