NetworkX系列教程(1)-创建graph
生活随笔
收集整理的這篇文章主要介紹了
NetworkX系列教程(1)-创建graph
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
小書匠Graph圖論
圖1 例子圖#導入相應的包?
import networkx as nx?
from PIL import Image?
import matplotlib.pyplot as plt?
from networkx.drawing.nx_pydot import to_pydot?
from matplotlib.font_manager import * ?
?
#定義自定義字體,文件名從1.b查看系統中文字體中來,這是Linux字體路徑,windows系統的字體路徑自查?
myfont = FontProperties(fname='/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc') ?
#解決負號'-'顯示為方塊的問題 ?
matplotlib.rcParams['axes.unicode_minus']=False ?
?
#定義圖的節點和邊?
nodes=['0','1','2','3','4','5','a','b','c']?
edges=[('0','0',1),('0','1',1),('0','5',1),('0','5',2),('1','2',3),('1','4',5),('2','1',7),('2','4',6),('a','b',0.5),('b','c',0.5),('c','a',0.5)]?
?
#用于顯示圖片?
def ShowGraph(G):?
#使用pydot保存圖片?
P=to_pydot(G) ?
P.write_jpeg('pydot.png')?
?
#使用matplotlib保存圖片?
pos=nx.shell_layout(G)?
nx.draw(G,pos,with_labels=True)?
plt.savefig('mat.png')?
plt.close() ?
?
#將前面兩張圖顯示?
plt.subplots(figsize=(12,6))?
#plt.suptitle('Diffrent')?
#載入matplotlib的圖片?
plt.subplot(1,2,1)?
plt.title('matplotlib')?
plt.imshow(Image.open('mat.png'))?
#plt.axis('off')?
#去掉坐標刻度?
plt.xticks([])?
plt.yticks([])?
?
#載入pydot的圖片?
plt.subplot(1,2,2)?
plt.title('pydot')?
plt.imshow(Image.open('pydot.png'))?
#plt.axis('off')?
#去掉坐標刻度?
plt.xticks([])?
plt.yticks([])?
?
#顯示圖片?
plt.show() ?
#定義無向圖?
G = nx.Graph()?
?
#往圖添加節點和邊?
G.add_nodes_from(nodes)?
G.add_weighted_edges_from(edges)?
?
#顯示圖片?
ShowGraph(G)?
有自循環的無向圖#清除前面的無向圖?
G.clear()?
?
#定義有向圖?
G = nx.DiGraph()?
#添加節點和邊?
G.add_nodes_from(nodes)?
G.add_weighted_edges_from(edges)?
?
#顯示圖片?
ShowGraph(G)?
有自循環的有向圖#清除前面的無向圖?
G.clear()?
?
#定義帶平行邊無向圖?
G = nx.MultiGraph()?
#添加節點和邊?
G.add_nodes_from(nodes)?
G.add_weighted_edges_from(edges)?
?
#顯示圖片?
ShowGraph(G)?
有自循環和平行邊的無向圖#清除前面的無向圖?
G.clear()?
?
#定義帶平行邊有向圖?
G = nx.MultiDiGraph()?
#添加節點和邊?
G.add_nodes_from(nodes)?
G.add_weighted_edges_from(edges)?
?
#顯示圖片?
ShowGraph(G)?
有自循環和平行邊的有向圖
研究中經常涉及到圖論的相關知識,而且常常面對某些術語時,根本不知道在說什么.前不久接觸了NetworkX這個graph處理工具,發現這個工具已經解決絕大部分的圖論問題(也許只是我自己認為的,沒有證據證明),所以把這個工具的使用學習下,順便學習圖論的相關知識.
NetworkX本來是有官方文檔的,花時間去學也是可以的,我這里把認為重要的整理出來.這些內容會分幾次發布,做成一個系列使用教程.
系統環境:
linuxmint 18.3
python 3.5.2
numpy 1.14.3
matplotlib 1.5.1
networkx 2.1
全文注意事項:
1.為了方便,graph我有時候會稱為圖,這時候不要將這個和圖片混淆了.
2.代碼中會頻繁使用G.clear(),這是在畫新的graph之前,先清空原先的graph
3.matplotlib包不能顯示平行邊,自循環這類的邊,所以需要借助pydot包來顯示,不過一般使用matplotlib來顯示
目錄:
- 1.創建一個Graph
- 1.1導入相應包,定義graph
- 1.2有自循環的無向圖
- 1.3有自循環的有向圖
- 1.4有自循環和平行邊的無向圖
- 1.5有自循環和平行邊的有向圖
1.創建一個Graph
例子:
下面涉及的graph如果不是特別需要,我將使用圖1這個手動創建的graph,這個graph有雙向邊,有孤島節點,有平行邊,有自循環
圖1 例子圖
1.1導入相應包,定義graph
1.2有自循環的無向圖
有自循環的無向圖
1.3有自循環的有向圖
有自循環的有向圖
1.4有自循環和平行邊的無向圖
有自循環和平行邊的無向圖
1.5有自循環和平行邊的有向圖
有自循環和平行邊的有向圖
轉載于:https://www.cnblogs.com/wushaogui/p/9199726.html
總結
以上是生活随笔為你收集整理的NetworkX系列教程(1)-创建graph的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ZipOutputStream 用法
- 下一篇: python nose测试框架全面介绍十