我正在尝试绘制数据关系图。我已经将我的输入数据建模为三元组(主题,谓词,对象),例如(app,'consumes',entity),(app,'masters',entity)等 每个三元组是一个边缘和2个节点。我想为不同颜色的不同节点着色。 我正在努力设置颜色属性以及将图形保存为可读大小的png文件
以下是代码:
G = nx.DiGraph ()
从文件和进程读取输入数据是节点和边的列表 ...... 添加节点 - 为每组节点设置差异颜色??
G.add_nodes_from (list(entities), node_color='yellow')
G.add_nodes_from (list(sornodes))
G.add_nodes_from (list (consumernodes))
添加边 - 为每组边设置diff颜色(我该怎么做?)
G.add_edges_from (masters)
G.add_edges_from (consumers)
G.add_edges_from (ads)
pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, pos, node_size=1700)
nx.draw_networkx_edges (G, pos, arrow=True)
nx.draw_networkx_labels (G, pos)
nx.draw_spring (G)
plt.figure(figsize=(7.195, 3.841))
fig1 = plt.gcf()
fig1.savefig ('out.png', dpi=1000)
plt.show ()
文件中没有图像。 plt.show在新窗口中弹出图形,同时打开另一个空窗口。我是从bash shell运行的。关闭两个图像窗口会终止程序。
有人想到吗?
答案 0 :(得分:0)
draw_networkx_nodes(...)似乎不喜欢具有不同节点集的多个调用以及每个集的不同颜色。它使用为图中所有节点指定的最后一种颜色。 解决方案是调用draw_networkx_nodes一次并传递一个列表,其中包含每个节点的颜色,列表len与节点数相同。
# s, c and a are 3 lists of nodes
for x in s:
nodes.append(x)
nodecolor.append('r')
for x in c:
nodes.append(x)
nodecolor.append('g')
for x in a:
nodes.append(x)
nodecolor.append('y')
G.add_nodes_from(nodes)
nx.draw_networkx_nodes(G, pos, node_color=nodecolor, node_size=1700)
我确定我可以优化代码来创建列表。