生活随笔
收集整理的這篇文章主要介紹了
NetworkX系列教程(1)-创建graph
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
小書匠Graph圖論研究中經(jīng)常涉及到圖論的相關(guān)知識(shí),而且常常面對(duì)某些術(shù)語(yǔ)時(shí),根本不知道在說什么.前不久接觸了NetworkX這個(gè)graph處理工具,發(fā)現(xiàn)這個(gè)工具已經(jīng)解決絕大部分的圖論問題(也許只是我自己認(rèn)為的,沒有證據(jù)證明),所以把這個(gè)工具的使用學(xué)習(xí)下,順便學(xué)習(xí)圖論的相關(guān)知識(shí).
NetworkX本來是有官方文檔的,花時(shí)間去學(xué)也是可以的,我這里把認(rèn)為重要的整理出來.這些內(nèi)容會(huì)分幾次發(fā)布,做成一個(gè)系列使用教程.
系統(tǒng)環(huán)境:
linuxmint 18.3
python 3.5.2
numpy 1.14.3
matplotlib 1.5.1
networkx 2.1
全文注意事項(xiàng):
1.為了方便,graph我有時(shí)候會(huì)稱為圖,這時(shí)候不要將這個(gè)和圖片混淆了.
2.代碼中會(huì)頻繁使用G.clear(),這是在畫新的graph之前,先清空原先的graph
3.matplotlib包不能顯示平行邊,自循環(huán)這類的邊,所以需要借助pydot包來顯示,不過一般使用matplotlib來顯示
目錄:
- 1.創(chuàng)建一個(gè)Graph
- 1.1導(dǎo)入相應(yīng)包,定義graph
- 1.2有自循環(huán)的無向圖
- 1.3有自循環(huán)的有向圖
- 1.4有自循環(huán)和平行邊的無向圖
- 1.5有自循環(huán)和平行邊的有向圖
1.創(chuàng)建一個(gè)Graph
例子:
下面涉及的graph如果不是特別需要,我將使用圖1這個(gè)手動(dòng)創(chuàng)建的graph,這個(gè)graph有雙向邊,有孤島節(jié)點(diǎn),有平行邊,有自循環(huán)
圖1 例子圖
1.1導(dǎo)入相應(yīng)包,定義graph
?
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 * ?
?
?
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):?
?
P=to_pydot(G) ?
P.write_jpeg('pydot.png')?
?
?
pos=nx.shell_layout(G)?
nx.draw(G,pos,with_labels=True)?
plt.savefig('mat.png')?
plt.close() ?
?
?
plt.subplots(figsize=(12,6))?
?
?
plt.subplot(1,2,1)?
plt.title('matplotlib')?
plt.imshow(Image.open('mat.png'))?
?
?
plt.xticks([])?
plt.yticks([])?
?
?
plt.subplot(1,2,2)?
plt.title('pydot')?
plt.imshow(Image.open('pydot.png'))?
?
?
plt.xticks([])?
plt.yticks([])?
?
?
plt.show() ?
1.2有自循環(huán)的無向圖
?
G = nx.Graph()?
?
?
G.add_nodes_from(nodes)?
G.add_weighted_edges_from(edges)?
?
?
ShowGraph(G)?
有自循環(huán)的無向圖
1.3有自循環(huán)的有向圖
?
G.clear()?
?
?
G = nx.DiGraph()?
?
G.add_nodes_from(nodes)?
G.add_weighted_edges_from(edges)?
?
?
ShowGraph(G)?
有自循環(huán)的有向圖
1.4有自循環(huán)和平行邊的無向圖
?
G.clear()?
?
?
G = nx.MultiGraph()?
?
G.add_nodes_from(nodes)?
G.add_weighted_edges_from(edges)?
?
?
ShowGraph(G)?
有自循環(huán)和平行邊的無向圖
1.5有自循環(huán)和平行邊的有向圖
?
G.clear()?
?
?
G = nx.MultiDiGraph()?
?
G.add_nodes_from(nodes)?
G.add_weighted_edges_from(edges)?
?
?
ShowGraph(G)?
有自循環(huán)和平行邊的有向圖
轉(zhuǎn)載于:https://www.cnblogs.com/wushaogui/p/9199726.html
總結(jié)
以上是生活随笔為你收集整理的NetworkX系列教程(1)-创建graph的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。