使用节点和边的子集绘制图形时,NetworkX额外标签

时间:2018-01-27 19:08:35

标签: python graph label draw networkx

我发现了一个我无法重现的问题。 我目前正在使用MultiDiGraph,我只想显示其中的一部分,问题是,当显示时,我不会只看到我选择的节点和边缘,而且还看到图中的所有标签。

我尝试用简单的东西重新创建错误,因为我的原始代码是复杂的解释方式。

import networkx as nx
import matplotlib.pyplot as plt
%matplotlib inline

gr = nx.MultiDiGraph()
gr.add_nodes_from(["192.168.1.1","192.168.1.2","192.168.1.3","192.168.1.4","192.168.1.5" ])
gr.add_edge("192.168.1.1", "192.168.1.2", key=1)
gr.add_edge("192.168.1.1", "192.168.1.3", key=2)
gr.add_edge("192.168.1.1", "192.168.1.4", key=3)
gr.add_edge("192.168.1.1", "192.168.1.5", key=4)
gr["192.168.1.1"]["192.168.1.2"][1]["color"] = 'b'
gr["192.168.1.1"]["192.168.1.3"][2]["color"] = 'b'
gr["192.168.1.1"]["192.168.1.4"][3]["color"] = 'b'
gr["192.168.1.1"]["192.168.1.5"][4]["color"] = 'b'

pos = nx.random_layout(gr)
plt.figure(figsize=(15, 7))

n=["192.168.1.1","192.168.1.2","192.168.1.3","192.168.1.4"]
e=[["192.168.1.1", "192.168.1.2", 1], ["192.168.1.1", "192.168.1.3", 2], 
   ["192.168.1.1", "192.168.1.4", 3]]
colors = [gr[u][v][k]["color"] for u, v, k in e]

nx.draw_networkx(gr, with_labels=True, edge_color=colors, nodelist=n, edgelist=e)

这是我得到的图像,如预期的那样: Functioning 但在我的代码中我得到这样的结果(结果的一部分): Error

有人知道为什么会这样做吗?

1 个答案:

答案 0 :(得分:0)

我自己找到了一个解决方案,如果遇到其他人,你可以单独绘制节点,边和标签。

import networkx as nx
l = {node: node for node in n}

nx.draw_networkx_nodes(G, pos=pos, node_color='black', alpha=0.9, node_size=60, nodelist=n)
nx.draw_networkx_edges(G, pos=pos, edge_color=colors, edgelist=e)
nx.draw_networkx_labels(G, pos=pos, font_size=8, font_color='black', labels=l)