標籤:設定 get [1] https bar sim 沒有 nod 簡單
networkx是python的一個第三方包,可以方便地調用各種圖演算法的計算。通過調用python畫圖包matplotlib能實現圖的可視化。
1.安裝
正好整理一下python第三方包的安裝方法。setuptools使用setuptools包,我們能夠手動下載,安裝第三方包。使用方式:下載第三方封裝來源檔案,在setup.py目錄下執行
python XX install
easy_install
easy_install工具,自動化地根據第三方包的名稱,一鍵連網搜尋,下載並且調用setuptools安裝。
使用方式:
上網下載ez_setup.py檔案,執行
python ez_setup.py安裝setuptools工具。
執行
easy_install SQLObject
安裝第三方包
pip
與easy_install類似,根據名稱一鍵下載,調用setuptools安裝。pip是可以看作是easy_install的升級版。
使用方式:
通過 http://www.jsxubar.info/install-pip.html
先下載get-pip.py檔案
運行python get-pip.py,自動安裝,包括setuptools在內的包
使用:
pip install simplejson --安裝包pip install --upgrade simplejson --升級包pip uninstall simplejson --卸載包
使用setuptools自助下載安裝,經常會遇到包確實,沒有制定編譯器等等各種問題而導致安裝失敗。所以使用easy_install或者pip是比較方便的選擇。
安裝networkx安裝networkx之前要安裝畫圖工具matplotlib,以及矩陣運算工具numpy,於是我們執行:
pip install numpypip install matplotlibpip install networkx
安裝完成。2.使用 networkx的英文版說明可以在其官方網站上下載得到,寫的簡單易懂。http://networkx.github.io/documentation/latest/reference/index.html
這裡記錄下一些簡單的建圖方法。在networkx中,圖以對象的形式提供借口。在圖對象中,還有點,邊等也是以對象形式提供,畫圖則調用matplotlib的函數完成。
建圖 networkx可以建立簡單無向圖graph,有向圖digraph,可重複邊的multi-graph。
import networkx as nxG=nx.Graph()D=nx.DiGraph()M=nx.MultiGraph()
點這裡的點可以是任意可區分的對象(hashable),比如數字,字串,對象等。
G.add_node(1)G.add_node('first_node')#這裡用一個對象多為key來唯一區別一個點#我們還能夠用一個列表來批量加入點G.add_nodes_from([1,2,3])#還可以用一個圖對象作為點,嵌入到其他圖中G.add_node(D) #這裡D作為一個點的key#或者把一個圖的所有點賦予另一個圖G.add_nodes_from(D) #這裡返回D的所有點,賦予G#與加入相同的傳遞方法,我們也可以刪除點G.remove_node(1)G.remove_nodes_from([1,2,3])
邊這裡的邊可以使用兩個單獨的對象作為輸入
G.add_edge(1,2) #表示1,2之間有一條邊。#如果不存在點1,2,則會自動加入點集合。#或者以元組的形式作為輸入e=(1,2)G.add_edge(*e)#這裡的*代表吧元組解包(unpack),當作一個個的值扔到函數中去。#如果不解包,等價於#G.add_edge(e)=G.add_edge((1,2))與參數傳遞的方式不符。#類似的,我們還可以使用包含元組的列表來傳遞參數G.add_edges_from([(1,2),(2,3)])#我們還可以報一個圖的邊賦予另一個圖G.add_edges_from(H)#刪除G.remove_edge(1,2)G.remove_edges_from([(1,2),(2,3)])</pre></div>
訪問
node_list = G.nodes()edge_list = G.edges()#可以返回包含點與邊的列表node = G.node[‘first_node’]#如上根據key返回點edge = G.edge['first_node']['second_node']#同樣的方法,返回兩個key之間的邊</pre></div>
屬性我們可以給圖,點,邊賦予各種屬性,最簡單的就是權值屬性
G.add_node(1,time='5pm')#在添加時跟上屬性G.add_nodes_from([1,2,3],time='5pm')#大量新增點是,跟上統一的屬性G.add_nodes_from([(3,{'time':'5pm'}), (4,{'time':'4pm'})])#或者寫成元組列表[(key,dict),(key,dict)]的形式G.node[1]['time']#根據字典key訪問屬性值。#給邊添加屬性也類似G.add_edge(1,2,time='3am')G.add_edges_from([(1,2,{'time'='5pm'}),(2,3,{'time'=3am})])#批量賦予屬性G.edge[1][2][‘time’]#訪問#我們還可以使用特定的函數批量返回屬性,如time = nx.get_edge_attributes(G,'time')#返回得到以元組為key,time屬性為值得一個字典time[(1,2)]</pre></div>#### **圖演算法**
nx.connected_components(G)
返回列表形式的G的全連通分量,每個分量一個子列表
<div style="font-family:Tahoma;font-size:14px;">類似的,networkx還提供各種圖演算法,具體可見官方文檔。</div>#### **畫圖**
nx.draw(G) #畫出圖G
matplotlib.show() #顯示出來
```
我們使用連通分量演算法,並畫出一個簡單的圖如下:
networkx的預設屬性效果並不好,我們根據文檔提供的借口設定合適的屬性,才能得到合適的圖。
networkx提供圖的點位置,大小,顏色,形狀,邊的顏色,類型等屬性可設定。
[Python] networkx入門 轉