參考: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:
