使用networkx和matplotlib绘制数据关系图

时间:2018-05-29 21:35:58

标签: matplotlib

我正在尝试绘制数据关系图。我已经将我的输入数据建模为三元组(主题,谓词,对象),例如(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运行的。关闭两个图像窗口会终止程序。

  • 我需要能够以不同的颜色显示节点集。
  • 我需要能够以不同颜色显示边缘组
  • 我希望能够将图表调整为大图片 - 不需要适合显示器尺寸

有人想到吗?

1 个答案:

答案 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)

我确定我可以优化代码来创建列表。