用networkx和matplotlib绘制显示网络图
1.用networkx的Graph()方法来生成一个无多重边无向图,其中networkx可以生成四种图,分别为无多重边无向图、无多重边有向图、有多重边无向图和有多重边有向图。
import networkx as nx
G = nx.Graph()
G = nx.DiGraph()
G = nx.MultiGraph()
G = nx.MultiDiGraph()
而我要生成的是无多重边无向图,因此我用G = nx.Graph()。
2.添加结点,在这里我选用的是add_nodes_from(nodes),参数nodes应为由结点组成的列表,如[1,2,3,4]。当然,也可以用add_node_from(node)来依次添加结点。
3.添加边,其实边分为有权值的边和无权值的边,我需要添加的是有权值的边,用add_weighted_edges_from(edges)(注意python3是这个方法,python2可能方法名不同),edges参数应为[('a','b',2),('c','d','1')]这种类型,其中a、b为边的两个结点,2则为权值。
前面所讲两个方法都是图G的方法。
4.用networkx来绘出网络图,nx.draw(G,pos,node_color,edge_color,width_size,node_size,with_labels)。
G为我们想要绘出的图,pos为网络图布局,我试了很多布局发现nx.drawing.layout.spring_layout(G)通常是我们想要的布局,node_color、edge_color、width_size、node_size、with_label则分别为结点颜色、边颜色、边的宽度、结点大小、结点是否带结点名,颜色的设置我用十六进制就可以了,颜色选用参考下面的链接。
https://www.sioe.cn/yingyong/yanse-rgb-16/
5.matplotlib.pyplot.show()显示图。
import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
colors = range(20)
G.add_nodes_from(nodes)
G.add_weighted_edges_from(edges)
#nx.draw_networkx_edges(G,pos = nx.drawing.layout.spring_layout(G),edge_color = '#000000',width = 0.1)
#nx.draw_networkx_nodes(G,pos = nx.drawing.layout.spring_layout(G),node_color = '#A0CBE2',node_size = 1)
nx.draw(G,pos = nx.drawing.layout.spring_layout(G),node_color='#0000CD',
edge_color='#000000',width=0.01, node_size = 0.5,edge_cmap=plt.cm.gray,
with_labels=False)
plt.show()
上一篇: networkx之error记录