python - 仅绘制 Djikstra 的节点和边 Networkx

标签 python python-3.4 networkx

我在使用 Networkx 计算 Djisktra 的 Python 最短路径时遇到了问题。我试图只绘制 Djikstra 方法返回的最短路径,因为要绘制的节点和边太多。

我已经有:

A = nx.dijkstra_path(g,'source','target')

效果不错。之后我有:

noCor = ["blue" if n in A else "red" for n in g.nodes()]
pos = nx.spring_layout(g)
nx.draw_networkx_nodes(g, pos=pos, node_color=noCor)
nx.draw_networkx_edges(g, pos=pos)
fig = plt.axis('off')
fig = plt.gcf()
fig.set_size_inches(52.08,52.08)
fig.savefig("Djikstra.png",dpi=96)

但它会保存所有图形。有人可以帮帮我吗?

非常感谢!

最佳答案

TL/DR:只需这样做:

pos = nx.spring_layout(g)
h = g.subgraph(A)
nx.draw_networkx_nodes(h,pos=pos, node_color='b') #or even nx.draw(h,pos=pos,node_color='b') to get nodes and edges in one command
nx.draw_networkx_edges(h,pos=pos)

完整答案:

您只想绘制 A 中的节点和路径中的边缘。你实际上可以避免 noCor完全使用 nodelist指定要绘制哪些节点的参数。

nx.draw_networkx_nodes(g,pos=pos, nodelist = A, node_color = 'b')

仅绘制对应于 A 的边,你需要弄清楚那些是什么。我知道的最简单的方法是

h = g.subgraph(A)

然后 h是在节点上导出的子图 A .它的所有边都在 A 中.我有 99.9% 的把握(但还没有通过正式证据检查)如果 A是两个节点之间的最短路径(由 Dijkstra 返回)然后 A 中的节点之间没有任何其他边除了路径中的那些。所以h.edges()将为 A 给出边.

nx.draw_networkx_edges(g,pos=pos, edgelist = h.edges())

一个更紧凑的形式会这样做:

pos = nx.spring_layout(g)
h = g.subgraph(A)
nx.draw_networkx_nodes(h,pos=pos, node_color='b') #or even nx.draw(h,pos=pos,node_color='b') to get nodes and edges in one command
nx.draw_networkx_edges(h,pos=pos)

你可能会问我为什么定义pos关于 g而不是 h .这是因为也许您想在 g 中绘制一些其他节点稍后进入您的图形或其他图形,然后保持一致的位置很有用。如果你只是针对 h 这样做,它基本上想要创建一条直线。


对您的命令的一些评论 nx.draw_networkx_nodes(g, pos=pos, node_color=noCor) .这告诉它绘制 g 中的所有节点。使用来自 noCor 的颜色[并且它将根据颜色在 noCor 中出现的顺序为节点着色以及节点出现在 g.nodes() 中的顺序].最后,请注意您需要使用 matplotlib 能够识别的颜色(参见 http://matplotlib.org/api/colors_api.html )。在这种情况下:

noCor = ["b" if n in A else "r" for n in g.nodes()]

关于python - 仅绘制 Djikstra 的节点和边 Networkx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30355932/

相关文章:

python - 简化行和列提取,numpy

python 在 % 之后显示几个变量

python - 在 crossbar autobahn 上订阅 python 主题

python - 使用从另一个python文件中的文件导入的python dict

python - 是否可以获得列表成员的指针?

python - NetworkX - 节点周围的路径

python - 建议在沙盘上检测直线,python

python - Python "If...elif...else"循环 1,500 个选项的替代技术

graph - NetworkX:在Python中连接两个独立图的节点

networkx - 使用 draw_networkx(),如何显示多个绘图窗口?