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.0) 16 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.0) 24 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.0) 54 55 cmap:Matplotlib色图 色彩映射节点的强度(默认=无) 56 57 vmin,vmax:float 节点色彩映射缩放的最小值和最大值(默认值=无) 58 59 线宽:[无|标量|序列] 符号边框的线宽(默认值= 1.0) 60 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: