日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NetworkX系列教程(1)-创建graph

發布時間:2024/4/17 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NetworkX系列教程(1)-创建graph 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
小書匠Graph圖論

研究中經常涉及到圖論的相關知識,而且常常面對某些術語時,根本不知道在說什么.前不久接觸了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

  • #導入相應的包?
  • 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() ?
  • 1.2有自循環的無向圖

  • #定義無向圖?
  • G = nx.Graph()?
  • ?
  • #往圖添加節點和邊?
  • G.add_nodes_from(nodes)?
  • G.add_weighted_edges_from(edges)?
  • ?
  • #顯示圖片?
  • ShowGraph(G)?

  • 有自循環的無向圖

    1.3有自循環的有向圖

  • #清除前面的無向圖?
  • G.clear()?
  • ?
  • #定義有向圖?
  • G = nx.DiGraph()?
  • #添加節點和邊?
  • G.add_nodes_from(nodes)?
  • G.add_weighted_edges_from(edges)?
  • ?
  • #顯示圖片?
  • ShowGraph(G)?

  • 有自循環的有向圖

    1.4有自循環和平行邊的無向圖

  • #清除前面的無向圖?
  • G.clear()?
  • ?
  • #定義帶平行邊無向圖?
  • G = nx.MultiGraph()?
  • #添加節點和邊?
  • G.add_nodes_from(nodes)?
  • G.add_weighted_edges_from(edges)?
  • ?
  • #顯示圖片?
  • ShowGraph(G)?

  • 有自循環和平行邊的無向圖

    1.5有自循環和平行邊的有向圖

  • #清除前面的無向圖?
  • G.clear()?
  • ?
  • #定義帶平行邊有向圖?
  • G = nx.MultiDiGraph()?
  • #添加節點和邊?
  • G.add_nodes_from(nodes)?
  • G.add_weighted_edges_from(edges)?
  • ?
  • #顯示圖片?
  • ShowGraph(G)?

  • 有自循環和平行邊的有向圖

    轉載于:https://www.cnblogs.com/wushaogui/p/9199726.html

    總結

    以上是生活随笔為你收集整理的NetworkX系列教程(1)-创建graph的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。