我正在通过csv文件中的数据生成网络拓扑图,其中s0..s2和c1..c3是关系图的节点。
network.csv:
源、端口、目的地 s1,1,c3 s2,1,c1 s0,1,c2 s1,2,s2 s2,2,s0
我需要使所有的来源是蓝色和目的地是绿色的。在不覆盖源节点的情况下,我如何做到这一点?
发布于 2019-01-29 07:45:18
以下是一个可行的解决办法:
import csv
import networkx as nx
from matplotlib import pyplot as plt
with open('../resources/network.csv') as csvfile:
reader = csv.DictReader(csvfile)
edges = {(row['source'], row['destination']) for row in reader }
print(edges) # {('s1', 'c3'), ('s1', 's2'), ('s0', 'c2'), ('s2', 's0'), ('s2', 'c1')}
G = nx.DiGraph()
source_nodes = set([edge[0] for edge in edges])
G.add_edges_from(edges)
for n in G.nodes():
G.nodes[n]['color'] = 'b' if n in source_nodes else 'g'
pos = nx.spring_layout(G)
colors = [node[1]['color'] for node in G.nodes(data=True)]
nx.draw_networkx(G, pos, with_labels=True, node_color=colors)
plt.show()我们首先将csv读入边缘列表,该列表后来用于构造G。为了很好地定义每个源节点的颜色,我们将每个源节点设置为蓝色,将节点的其余设置为绿色(即也不是源节点的所有目标节点)。
我们还使用nx.draw_networkx来获得更紧凑的图形绘制实现。
其结果应该是:

https://stackoverflow.com/questions/54412983
复制相似问题