NetworkX-画图

 

参考:https://blog.csdn.net/qq951127336/article/details/54586869

1.创建图


 1 networkx有四种图 Graph 、DiGraph、MultiGraph、MultiDiGraph,分别为无多重边无向图、无多重边有向图、有多重边无向图、有多重边有向图。
 2 
 3 import network as nx
 4 
 5 G = nx.Graph()#创建空的网络图
 6 
 7 G = nx.DiGraph()
 8 
 9 G = nx.MultiGraph()
10 
11 G = nx.MultiDiGraph()
12 
13 #添加点和边:
14 
15 G.add_node('a')#添加点a
16 
17 G.add_node(1,1)#用坐标来添加点
18 
19 G.add_edge('x','y')#添加边,起点为x,终点为y
20 
21 G.add_weight_edges_from([('x','y',1.0)])#第三个输入量为权值 也可以
22 
23 list = [[('a','b',5.0),('b','c',3.0),('a','c',1.0)]
24 
25 G.add_weight_edges_from([(list)])
26 
27 #显示:
28 
29 #需要导入matplotlib
30 
31 import matplotlib.pyplot as plt
32 
33 nx.draw(G)
34 
35 plt.show()

 

显示函数:

1 nx.draw(G,pos = nx.random_layout(G),node_color = 'b',edge_color = 'r',with_labels = True,font_size =18,node_size =20)
2 
3 pos 指的是布局 主要有spring_layout , random_layout,circle_layout,shell_layout。node_color指节点颜色,有rbykw ,同理edge_color. 
4 with_labels指节点是否显示名字,size表示大小,font_color表示字的颜色。

 

参考:https://networkx.github.io/documentation/latest/tutorial.html#drawing-graphs

2.画出好看的图

 1 两个主要的函数:
 2 
 3 def draw_networkx_edges(G, pos, edgelist=None, width=1.0, edge_color='k',
 4 
 5          style='solid', alpha=1.0, edge_cmap=None, edge_vmin=None, edge_vmax=None,
 6 
 7          ax=None, arrows=True, label=None, **kwds):
 8 
 9 G:图表 一个networkx图
10 
11 pos:dictionary 将节点作为键和位置作为值的字典。 位置应该是长度为2的序列。
12 
13 edgelist:边缘元组的集合 只绘制指定的边(默认= G.edges())
14 
15 width:float或float数组 边线宽度(默认值= 1.016 
17 edge_color:颜色字符串或浮点数组 边缘颜色。可以是单颜色格式字符串(default ='r'),
18 
19 或者具有与edgelist相同长度的颜色序列。 如果指定了数值,它们将被映射到 颜色使用edge_cmap和edge_vmin,edge_vmax参数。
20 
21 style:string 边线样式(默认='solid')(实线|虚线|点线,dashdot)
22 
23 alpha:float 边缘透明度(默认值= 1.024 
25 edge_ cmap:Matplotlib色彩映射 用于映射边缘强度的色彩映射(默认值=无)
26 
27 edge_vmin,edge_vmax:float 边缘色图缩放的最小值和最大值(默认值=无)
28 
29 ax:Matplotlib Axes对象,可选 在指定的Matplotlib轴中绘制图形。
30 
31 arrows:bool,optional(default = True) 对于有向图,如果为真,则绘制箭头。
32 
33 label:图例的标签
34 
35 def draw_networkx_nodes(G, pos, nodelist=None, node_size=300, node_color='r',
36 
37           node_shape='o', alpha=1.0, cmap=None, vmin=None, vmax=None, ax=None, linewidths=None, label=None, **kwds):
38 
39 pos:dictionary 将节点作为键和位置作为值的字典。 位置应该是长度为2的序列。
40 
41 ax:Matplotlib Axes对象,可选 在指定的Matplotlib轴中绘制图形。
42 
43 nodelist:list,可选 只绘制指定的节点(默认G.nodes())
44 
45 node_size:标量或数组 节点大小(默认值= 300)。如果指定了数组,它必须是 与点头长度相同。
46 
47 node_color:颜色字符串或浮点数组 节点颜色。可以是单颜色格式字符串(default ='r'), 或者具有与点头相同长度的颜色序列。
48 
49 如果指定了数值,它们将被映射到 颜色使用cmap和vmin,vmax参数。看到 matplotlib.scatter更多详细信息。
50 
51 node_shape:string 节点的形状。规格为matplotlib.scatter 标记,'so ^> v <dph8'(默认='o')之一。
52 
53 alpha:float 节点透明度(默认值= 1.054 
55 cmap:Matplotlib色图 色彩映射节点的强度(默认=无)
56 
57 vmin,vmax:float 节点色彩映射缩放的最小值和最大值(默认值=无)
58 
59 线宽:[无|标量|序列] 符号边框的线宽(默认值= 1.060 
61 label:[无|串] 图例的标签
62 
63 然后基本上所有networkx的超酷精美图的源码你都能快速弄懂了。 
64 http://networkx.github.io/ 网络图案例源码
65 
66 https://networkx.github.io/documentation/latest/auto_examples/index.html#drawing

 

3.Example:

 1 import matplotlib.pyplot as plt
 2 import networkx as nx
 3 G = nx.random_geometric_graph(200, 0.125)
 4 # position is stored as node attribute data for random_geometric_graph
 5 pos = nx.get_node_attributes(G, 'pos')
 6 
 7 # find node near center (0.5,0.5)
 8 dmin = 1
 9 ncenter = 0
10 for n in pos:
11     x, y = pos[n]
12     d = (x - 0.5)**2 + (y - 0.5)**2
13     if d < dmin:
14         ncenter = n
15         dmin = d
16 
17 # color by path length from node near center
18 p = dict(nx.single_source_shortest_path_length(G, ncenter))
19 
20 plt.figure(figsize=(8, 8))
21 nx.draw_networkx_edges(G, pos, nodelist=[ncenter], alpha=0.4)
22 nx.draw_networkx_nodes(G, pos, nodelist=list(p.keys()),
23                        node_size=80,
24                        node_color=list(p.values()),
25                        cmap=plt.cm.Reds_r)
26 
27 plt.xlim(-0.05, 1.05)
28 plt.ylim(-0.05, 1.05)
29 plt.axis('off')
30 plt.show()

 

result:

 

 

 

 

 

posted @ 2018-08-12 21:46  谁动了我的奶盖  阅读(10242)  评论(1编辑  收藏  举报