我有以下程序生成我的图表并将其显示在一个图上。
Edges2 = [(1,2),(1,3),(1,4),(4,5),(6,7),(6,8)]
G = nx.DiGraph()
生成图表的功能如下:
def create_graph(G,nodes,Sets):
G.add_edges_from(nodes)
#value assigned to each world
custom_labels={}
custom_node_sizes={}
node_colours=['y']
for i in range(0, len(Sets)):
custom_labels[i+1] = Sets[i]
custom_node_sizes[i+1] = 5000
if i < len(Sets):
node_colours.append('b')
nx.draw(G,labels=custom_labels,node_list = nodes,node_color=node_colours, node_size=custom_node_sizes.values())
#show with custom labels
plt.show()
对于上面的函数,我传递边缘列表(Edges2)。 该函数在单个图形上生成两个断开的图形。但是,我想分别保存这两个图。
基本上,有没有办法将两个断开连接的图表保存到两个文件中?所以,我可以获得graph1.png和graph2.png。
答案 0 :(得分:1)
我没有完全得到&#39;套装&#39;输入到您的函数或为什么add_edges_from(nodes)
使用节点作为输入而不是边缘!因此,为了回答你在两个单独的文件中绘制断开连接的图形的问题,我在没有custom_labels的情况下重现了问题,因为它取决于&#39;集合&#39;输入和我发送Edges2作为节点和集的输入。正如@joel所建议的,我使用weakly_connected_component_subgraphs
函数,然后循环函数的输出,分别保存每个图形。因此,最终原始图表保存在 original_graph.png 中,子图分别保存在 graph1.png 和 graph2.png 中。< / p>
def create_graph(G,nodes,Sets):
G.add_edges_from(nodes)
#value assigned to each world
custom_labels={}
custom_node_sizes={}
node_colours=['y']
for i in range(0, len(Sets)):
custom_labels[i+1] = Sets[i]
custom_node_sizes[i+1] = 5000
if i < len(Sets):
node_colours.append('b')
nx.draw(G,node_list = nodes,node_color=node_colours, node_size=1000, with_labels = True)
plt.savefig("original_graph.png")
plt.show()
G_comp = nx.weakly_connected_component_subgraphs(G)
i = 1
for comp in G_comp:
nx.draw(comp,node_color=node_colours, node_size=1000, with_labels=True)
#show with custom labels
fig_name = "graph" + str(i) + ".png"
plt.savefig(fig_name)
plt.show()
i += 1
Edges2 = [(1, 2), (1, 3), (1, 4), (4, 5), (6, 7), (6,8)]
G = nx.DiGraph()
create_graph(G,Edges2,Edges2)
由AKI编辑: 我添加了我需要的标签(见评论)。代码的最后一部分是:
i = 1
custom_number = 1;
for comp in G_comp:
dictfilt = lambda x, y: dict([ (i,x[i]) for i in x if i in set(y) ])
wanted_keys = (range(custom_number,custom_number + len(comp)))
newdict = dictfilt(custom_labels, wanted_keys)
nx.draw(comp,node_color=node_colours, node_size=1000, with_labels=True, labels = newdict)
#show with custom labels
fig_name = "graph" + str(i) + ".png"
plt.savefig(fig_name)
plt.show()
custom_number += len(comp)
i += 1
这个改进的版本从字典中获取必要的数据。 非常感谢@author的回答
答案 1 :(得分:0)