Python Network(二)绘图draw系列draw(),draw_networkx(),draw_networkx_nodes(),draw_networkx_edges()
Python Network(一)
目錄
- 總述
- 1. nx.draw()
- 1.1 示例
- 1.2 pos參數可選內容
- 2. draw_networkx()
- 2.1 示例
- 2.2 補充:matplotlib顏色對照表
- 3. draw_networkx_nodes()
- 3.1 示例
- 3.2 font-family常用字體列表
- 4. draw_networkx_edges()
- 4.1 示例
- 5. draw_networkx_labels()
- 5.1 示例
- 6.draw_networkx_edge_labels()
- 6.1 示例
本文主要講解network最后的繪圖功能
總述
| draw(G[, pos, ax, hold]) | 用Matplotlib繪制圖形G |
| draw_networkx(G[, pos, with_labels]) | 使用Matplotlib繪制圖形G |
| draw_networkx_nodes(G, pos[, nodelist, …]) | 繪制圖G的節點 |
| draw_networkx_edges(G, pos[, edgelist, …]) | 繪制圖形G的邊緣 |
| draw_networkx_labels(G, pos[, labels, …]) | 在圖G上繪制節點標簽 |
| draw_networkx_edge_labels(G, pos[, …]) | 繪制邊緣標簽 |
| draw_circular(G, **kwargs) | 用圓形布局繪制圖形G |
| draw_random(G, **kwargs) | 用隨機布局繪制圖形G |
| draw_spectral(G, **kwargs) | 用頻譜布局繪制圖形G |
| draw_spring(G, **kwargs) | 用彈簧布局繪制圖形G |
| draw_shell(G, **kwargs) | 使用外殼布局繪制networkx圖 |
| draw_graphviz(G[, prog]) | 使用graphviz布局繪制networkx圖 |
1. nx.draw()
默認情況下,將圖形繪制為沒有節點標簽或邊緣標簽且使用完整Matplotlib圖形區域且無軸標簽的簡單表示形式。有關允許標題,軸標簽等的更多功能齊全的圖形,請參見draw_networkx()
draw(G,pos = None,ax = None,hold = None,** kwds )| G | 必選 | 網絡圖 |
| pos | 字典,可選 | 以節點為鍵,位置為值的字典。如果未指定,將計算彈簧布局位置。有關計算節點位置的功能,請參見networkx.layout |
| ax | Matplotlib Axes對象,可選 | 在指定的Matplotlib軸上繪制圖形。 |
| hold | 布爾,可選 | 設置Matplotlib保持狀態。如果為True,則隨后的繪制命令將添加到當前軸。 |
| **kwds | 可選關鍵字 | 有關可選關鍵字的描述,請參見networkx.draw_networkx() |
1.1 示例
import networkx as nx # 創建空的網格 G=nx.Graph() # 添加節點 G.add_node('JFK') G.add_nodes_from(['SFO','LAX','ATL','FLO','DFW','HNL']) # G.number_of_nodes() # 查看節點數,輸出結果7# 添加連線 G.add_edges_from([('JFK','SFO'),('JFK','LAX'),('LAX','ATL'),('FLO','ATL'),('ATL','JFK'),('FLO','JFK'),('DFW','HNL')]) G.add_edges_from([('OKC','DFW'),('OGG','DFW'),('OGG','LAX')]) # 繪制網絡圖 nx.draw(G,pos=nx.circular_layout(G),with_labels=True)1.2 pos參數可選內容
nx.circular_layout(nf)節點在圓環上均勻分布
nx.kamada_kawai_layout(nf) 這個低版本的network好像沒有
nx.random_layout(nf)節點隨機分布
nx.spectral_layout(nf)根據圖的拉普拉斯特征向量排列節點(我也不知道這個是個啥)
nx.spring_layout(nf)用Fruchterman-Reingold算法排列節點(樣子類似多中心放射狀)
nx.shell_layout(nf)節點在同心圓上分布
2. draw_networkx()
使用Matplotlib繪制圖形,并帶有節點位置,標簽,標題和許多其他圖形功能的選項。有關沒有標簽或軸的簡單繪圖,請參見draw()
draw_networkx (G,pos = None,with_labels = True,** kwds )| G | 必選 | 網絡圖 |
| pos | 字典,可選 | 以節點為鍵,位置為值的字典。如果未指定,將計算彈簧布局位置。有關計算節點位置的功能,請參見networkx.layout |
| ax | Matplotlib Axes對象,可選 | 在指定的Matplotlib軸上繪制圖形。 |
| with_labels | bool,可選(默認= True) | 設置為True以在節點上繪制標簽 |
| nodelist | 列表,可選(默認G.nodes()) | 僅繪制指定的節點 |
| edgelist | 列表,可選(默認值= G.edges()) | 僅繪制指定的邊緣 |
| node_size | 標量或數組,可選(默認為300) | 節點大小。如果指定了數組,則其長度必須與節點列表的長度相同。 |
| node_color | 顏色字符串或浮點數數組,(默認=“ r”) | 節點顏色。可以是單個顏色格式字符串,也可以是長度與節點列表相同的顏色序列。如果指定了數值,則將使用cmap和vmin,vmax參數將它們映射為顏色。有關更多詳細信息,請參見matplotlib.scatter。 |
| node_shape | 字符串,可選(默認=‘o’) | 節點的形狀。規范作為matplotlib.scatter標記,是’so ^> v <dph8’之一。 |
| alpha | 浮點型,可選(默認= 1.0) | 節點透明度 |
| cmap | Matplotlib顏色圖,可選(默認=無) | 用于映射節點強度的顏色圖 |
| vmin,vmax | 浮動,可選(默認=無) | 節點顏色圖縮放的最小值和最大值 |
| linewidths | [無| 標量| 順序] | 符號邊框的線寬(默認= 1.0) |
| width | 浮動,可選(默認= 1.0) | 邊緣線寬 |
| edge_color | 顏色字符串或浮點數數組(默認=‘r’) | 邊緣顏色。可以是單個顏色格式字符串,也可以是與邊列表長度相同的顏色序列。如果指定了數值,則將使用edge_cmap和edge_vmin,edge_vmax參數將它們映射為顏色。 |
| edge_cmap | Matplotlib顏色圖,可選(默認=無) | 用于映射邊緣強度的顏色圖 |
| edge_vmin,edge_vmax | 浮點型,可選(默認=無) | 邊緣顏色圖縮放的最小值和最大值 |
| style | 字符串,可選(默認=‘solid’) | 邊線樣式(實線 |
| labels | 字典,可選(默認=無) | 字典中的節點標簽,由文本標簽的節點作為鍵控 |
| font_size | int,可選(默認= 12) | 文字標簽的字體大小 |
| font_color | 字符串,可選(默認='k’黑色) | 字體顏色字符串 |
| font_weight | 字符串,可選(默認=‘正常’) | 字型粗細 |
| font_family | 字符串,可選(默認=‘sans-serif’) | 字體系列 |
| label | 字符串,可選 | 圖例的標簽 |
2.1 示例
import networkx as nx # 創建空的網格 G=nx.Graph() # 添加節點 G.add_node('JFK') G.add_nodes_from(['SFO','LAX','ATL','FLO','DFW','HNL'])# 添加連線 G.add_edges_from([('JFK','SFO'),('JFK','LAX'),('LAX','ATL'),('FLO','ATL'),('ATL','JFK'),('FLO','JFK'),('DFW','HNL')]) G.add_edges_from([('OKC','DFW'),('OGG','DFW'),('OGG','LAX')])nx.draw_networkx(G,pos=nx.circular_layout(G),with_labels=True,alpha=0.5,node_color='yellow',node_shape='s',linewidths=4,width=2,edge_color='blue',style='--',font_size=15,font_color='blue',font_family='SimHei') # pos選用圓形樣式,with_labels=True在節點上繪制標簽,alpha=0.5節點透明度 #linewidths=4節點邊框寬度為4,node_color='yellow'節點顏色設為黃色,node_shape='s'節點的形狀設為正方形 # width=2邊的線寬2,edge_color='blue'設置邊的顏色,style='--'邊的線樣式, # font_size=15設置標簽字號大小,font_color='blue'設置標簽字體顏色,font_family='SimHei'設置標簽字體2.2 補充:matplotlib顏色對照表
3. draw_networkx_nodes()
這僅繪制圖G的節點
draw_networkx_nodes(G,pos,nodelist = None,node_size = 300,node_color = 'r',node_shape = 'o',alpha = 1.0,cmap = None,vmin = None,vmax = None,ax = None, linewidths=None,label=None,**kwds)| G | 必選 | 網絡圖 |
| pos | 字典,可選 | 以節點為鍵,位置為值的字典 ,位置應為長度為2的序列 |
| ax | Matplotlib Axes對象,可選 | 在指定的Matplotlib軸上繪制圖形。 |
| nodelist | 列表,可選(默認G.nodes()) | 僅繪制指定的節點 |
| node_size | 節點的標量或數組大小(默認為300)。如果指定了數組,則其 長度必須與節點列表的長度相同。 | |
| node_color | 顏色字符串或浮點型 | 節點顏色的數組。可以是單個顏色格式字符串(default =‘r’), 也可以是長度與節點列表相同的顏色序列。如果指定了數值,則將使用cmap和vmin,vmax參數將它們映射為顏色。有關 更多詳細信息,請參見matplotlib.scatter。 |
| node_shape | string | 節點的形狀。規范作為matplotlib.scatter 標記,是’so ^> v <dph8’(默認=‘o’)之一。 |
| alpha | float | 節點透明度(默認為1.0) |
| cmap | Matplotlib顏色圖 | 用于映射節點強度的顏色圖(默認為無) |
| vmin,vmax | 浮動 | 節點色彩圖縮放的最小值和最大值(默認值:None) |
| linewidths | [無| 標量| 序列] | 符號邊框的線寬(默認= 1.0) |
| label | [無| 字符串] |
3.1 示例
import networkx as nx # 創建空的網格 G=nx.Graph() # 添加節點 G.add_node('JFK') G.add_nodes_from(['SFO','LAX','ATL','FLO','DFW','HNL']) # 將節點分類 nodelist1=['SFO','LAX','ATL','FLO'] nodelist2=['DFW','HNL','JFK']# 添加連線 G.add_edges_from([('JFK','SFO'),('JFK','LAX'),('LAX','ATL'),('FLO','ATL'),('ATL','JFK'),('FLO','JFK'),('DFW','HNL')])# 繪制網絡圖 nx.draw_networkx_nodes(G,pos=nx.circular_layout(G),nodelist=nodelist1,alpha=0.6,node_color='blue',node_shape='p',node_size=200,linewidths=2) nx.draw_networkx_nodes(G,pos=nx.circular_layout(G),nodelist=nodelist2,alpha=0.6,node_color='red',node_shape='v',node_size=220)3.2 font-family常用字體列表
黑體:SimHei 宋體:SimSun 新宋體:NSimSun 仿宋:FangSong 楷體:KaiTi 仿宋_GB2312:FangSong_GB2312 楷體_GB2312:KaiTi_GB2312 微軟雅黑體:Microsoft YaHei如果想看詳細的,可以參考這個鏈接
4. draw_networkx_edges()
繪制圖形G的邊
draw_networkx_edges(G, pos,edgelist=None, width=1.0,edge_color='k',style='solid',alpha=None, edge_cmap=None,edge_vmin=None,edge_vmax=None,ax=None, arrows=True,label=None,**kwds)| G | 必選 | 網絡圖 |
| pos | 字典,可選 | 以節點為鍵,位置為值的字典 ,位置應為長度為2的序列 |
| edgelist | 邊緣元組的集合 | 僅繪制指定的邊緣,默認= G.edges() |
| width | float | 邊緣的線寬(默認= 1.0) |
| edge_color | 顏色字符串或浮點數數組 | 邊緣顏色。可以是單個顏色格式字符串(默認為’r’),也可以是長度與邊列表相同的顏色序列。如果指定了數值,則將使用edge_cmap和edge_vmin,edge_vmax參數將它們映射為顏色 |
| style | 字符串 | 邊線樣式(默認=“實心”)(實心|虛線|點劃線,點劃線) |
| alpha | 浮點數 | 邊緣的線寬(默認= 1.0) |
| edge_ cmap | Matplotlib顏色圖 | 用于映射邊緣強度的顏色圖(默認=無) |
| edge_vmin,edge_vmax | 浮點數 | 邊緣顏色圖縮放的最小值和最大值(默認為“無”) |
| ax | Matplotlib Axes對象,可選 | 在指定的Matplotlib軸上繪制圖形 |
| arrows | 布爾型,可選(默認= True) | 對于有向圖,如果為True,請繪制箭頭。 |
| label | [None| string] | 圖例標簽 |
4.1 示例
這里的重點主要是edgelist元組集合的設置,將edge分為了三組,第一組為nodelist1中的點,相互連接的線;第二組為nodelist2中的點,相互連接的線;第三組為nodelist1與nodelist2中的點,相互連接的線;
import networkx as nx # 創建空的網格 G=nx.Graph() # 添加節點 G.add_node('JFK') G.add_nodes_from(['SFO','LAX','ATL','FLO','DFW','HNL']) # 將節點分類 nodelist1=['SFO','LAX','ATL','FLO'] nodelist2=['DFW','HNL','JFK']# 添加連線 edge_list=[('JFK','SFO'),('JFK','LAX'),('LAX','ATL'),('FLO','ATL'),('ATL','JFK'),('FLO','JFK'),('DFW','HNL')] G.add_edges_from(edge_list) # G.add_edges_from([('OKC','DFW'),('OGG','DFW'),('OGG','LAX')]) # 將邊分類 edgelist1=[] for i in range(len(edge_list)):if (edge_list[i][0] in nodelist1) and (edge_list[i][1] in nodelist1):edgelist1.append(edge_list[i]) # print(edgelist1) edgelist2=[] for i in range(len(edge_list)):if (edge_list[i][0] in nodelist2) and (edge_list[i][1] in nodelist2):edgelist2.append(edge_list[i]) edgelist3=[] for i in edge_list:if i not in edgelist1 or edgelist2:edgelist3.append(i)# 繪制網絡圖 # nx.draw(G) nx.draw_networkx_nodes(G,pos=nx.shell_layout(G),nodelist=nodelist1,alpha=0.4,node_color='blue',node_shape='p',node_size=[float(len(list(G.neighbors(i)))/len(G.nodes())*200) for i in nodelist1],linewidths=2) nx.draw_networkx_nodes(G,pos=nx.shell_layout(G),nodelist=nodelist2,alpha=0.4,node_color='red',node_shape='v',node_size=[float(len(list(G.neighbors(i)))/len(G.nodes())*200) for i in nodelist2])nx.draw_networkx_edges(G,pos=nx.shell_layout(G),edgelist=edgelist1,width=1,edge_color='b') nx.draw_networkx_edges(G,pos=nx.shell_layout(G),edgelist=edgelist2,width=2,edge_color='r') nx.draw_networkx_edges(G,pos=nx.shell_layout(G),edgelist=edgelist3,width=1,edge_color='k')nx.draw_networkx_labels(G,pos=nx.shell_layout(G),font_sizet=20,font_color='k',font_family='SimHei',alpha=1)
注:如果在“添加連線那部分代碼中添加”G.add_edges_from([('OKC','DFW'),('OGG','DFW'),('OGG','LAX')])就會發現,有一部分點是沒有連線的,這個就很尷尬,因為分組edgelist的時候,我是按照點來分組的,所以沒有nodelist的節點,是沒有能夠劃分到edgelist中的,很遺憾,暫時沒有找到很好的解決辦法
5. draw_networkx_labels()
draw_networkx_labels(G, pos,labels=None,font_size=12,font_color='k',font_family='sans-serif',font_weight='normal',alpha=1.0,ax=None,**kwds)| G | 必選 | 網絡圖 |
| pos | 字典,可選 | 以節點為鍵,位置為值的字典 ,位置應為長度為2的序列 |
| labels | 字典,可選(默認=無) | 字典中的節點標簽,由文本標簽的節點作為鍵控 |
| font_sizet | int | 文本標簽的字體大小(默認值= 12) |
| font_color | 字符串 | 字體顏色字符串(默認='k’黑色) |
| font_family | 邊緣元組的集合 | 字體(默認=“ sans-serif”) |
| font_weight | 字符串 | 字體粗細(默認=“正常”) |
| alpha | 浮動 | 文字透明度(默認= 1.0) |
| ax | Matplotlib Axes對象,可選 | 在指定的Matplotlib軸上繪制圖形 |
5.1 示例
import networkx as nx # 創建空的網格 G=nx.Graph() # 添加節點 G.add_node('JFK') G.add_nodes_from(['SFO','LAX','ATL','FLO','DFW','HNL']) # 將節點分類 nodelist1=['SFO','LAX','ATL','FLO'] nodelist2=['DFW','HNL','JFK']# 添加連線 G.add_edges_from([('JFK','SFO'),('JFK','LAX'),('LAX','ATL'),('FLO','ATL'),('ATL','JFK'),('FLO','JFK'),('DFW','HNL')]) # G.add_edges_from([('OKC','DFW'),('OGG','DFW'),('OGG','LAX')]) # 將邊分類 edgelist1=[] tup=() for u in nodelist1:for v in nodelist1:if str(v) != str(u):tup=(u,v)edgelist1.append(tup)else:passedgelist2=[] tup=() for u in nodelist2:for v in nodelist2:if str(v) != str(u):tup=(u,v)edgelist2.append(tup)else:passedgelist3=[] tup=() for u in nodelist1:for v in nodelist2:if str(v) != str(u):tup=(u,v)edgelist3.append(tup)else:pass# 繪制網絡圖 nx.draw_networkx_nodes(G,pos=nx.circular_layout(G),nodelist=nodelist1,alpha=0.4,node_color='blue',node_shape='p',node_size=200,linewidths=2) nx.draw_networkx_nodes(G,pos=nx.circular_layout(G),nodelist=nodelist2,alpha=0.4,node_color='red',node_shape='v',node_size=220)nx.draw_networkx_edges(G,pos=nx.circular_layout(G),edgelist=edgelist1,width=2,edge_color='b') nx.draw_networkx_edges(G,pos=nx.circular_layout(G),edgelist=edgelist2,width=2,edge_color='r') nx.draw_networkx_edges(G,pos=nx.circular_layout(G),edgelist=edgelist3,width=2,edge_color='k')nx.draw_networkx_labels(G,pos=nx.circular_layout(G),font_sizet=15,font_color='k',font_family='SimHei',alpha=0.8)
此處和4里面有些區別,代碼運行沒問題,邏輯上有些問題,代碼就不修改了,留作提醒
6.draw_networkx_edge_labels()
繪制邊緣標簽,這個邊緣標簽是指連線上添加標簽內容
draw_networkx_edge_labels(G, pos,edge_labels=None,label_pos=0.5,font_size=10,font_color='k',font_family='sans-serif',font_weight='normal',alpha=1.0,bbox=None,ax=None,rotate=True,**kwds)| G | 必選 | 網絡圖 |
| pos | 字典,可選 | 以節點為鍵,位置為值的字典 ,位置應為長度為2的序列 |
| ax | Matplotlib Axes對象,可選 | 在指定的Matplotlib軸上繪制圖形 |
| alpha | float | 文字透明度(默認= 1.0) |
| edge_labels | 字典 | 字典中的邊緣標簽由文本標簽的邊緣二元組(默認為“無”)作為鍵。僅繪制字典中鍵的標簽 |
| label_pos | float | 邊緣標簽沿邊緣的位置(0 =頭,0.5 =中心,1 =尾部) |
| font_size | int | 文本標簽的字體大小(默認值= 12) |
| font_color | font_color | 字體顏色字符串(默認='k’黑色) |
| font_weight | 字符串 | 字體粗細(默認=“正常”) |
| font_family | 字符串 | 字體家族(默認=“ sans-serif”) |
| bbox | Matplotlib bbox | 指定文本框的形狀和顏色 |
| clip_on | 布爾 | 在軸邊界處啟用裁剪(默認= True) |
6.1 示例
import networkx as nx # 創建空的網格 G=nx.Graph() # 添加節點 G.add_node('JFK') G.add_nodes_from(['SFO','LAX','ATL','FLO','DFW','HNL']) # 將節點分類 nodelist1=['SFO','LAX','ATL','FLO'] nodelist2=['DFW','HNL','JFK']# 添加連線 G.add_edges_from([('JFK','SFO'),('JFK','LAX'),('LAX','ATL'),('FLO','ATL'),('ATL','JFK'),('FLO','JFK'),('DFW','HNL')]) # G.add_edges_from([('OKC','DFW'),('OGG','DFW'),('OGG','LAX')]) # 將邊分類 edgelist1=[] tup=() for u in nodelist1:for v in nodelist1:if str(v) != str(u):tup=(u,v)edgelist1.append(tup)else:passedgelist2=[] tup=() for u in nodelist2:for v in nodelist2:if str(v) != str(u):tup=(u,v)edgelist2.append(tup)else:passedgelist3=[] tup=() for u in nodelist1:for v in nodelist2:if str(v) != str(u):tup=(u,v)edgelist3.append(tup)else:pass# 繪制網絡圖 nx.draw_networkx_nodes(G,pos=nx.circular_layout(G),nodelist=nodelist1,alpha=0.4,node_color='blue',node_shape='p',node_size=200,linewidths=2) nx.draw_networkx_nodes(G,pos=nx.circular_layout(G),nodelist=nodelist2,alpha=0.4,node_color='red',node_shape='v',node_size=220)nx.draw_networkx_edges(G,pos=nx.circular_layout(G),edgelist=edgelist1,width=2,edge_color='b') nx.draw_networkx_edges(G,pos=nx.circular_layout(G),edgelist=edgelist2,width=2,edge_color='r') nx.draw_networkx_edges(G,pos=nx.circular_layout(G),edgelist=edgelist3,width=2,edge_color='k')nx.draw_networkx_labels(G,pos=nx.circular_layout(G),font_sizet=15,font_color='k',font_family='SimHei',alpha=1)nx.draw_networkx_edge_labels(G, pos=nx.circular_layout(G))總結
以上是生活随笔為你收集整理的Python Network(二)绘图draw系列draw(),draw_networkx(),draw_networkx_nodes(),draw_networkx_edges()的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于easyx低配版flappybird
- 下一篇: python打砖块游戏算法设计分析_基于