Python networkx 繪製網狀圖簡介__Python

來源:互聯網
上載者:User
轉自:http://www.cnblogs.com/huiyang865/p/5677449.html 繪製基本網狀圖

用matplotlib繪製網狀圖
基本流程:
1. 匯入networkx,matplotlib包
2. 建立網路
3. 繪製網路 nx.draw()
4. 建立布局 pos = nx.spring_layout美化作用
最基本畫圖程式

1 import networkx as nx             #匯入networkx包2 import matplotlib.pyplot as plt 3 G = nx.random_graphs.barabasi_albert_graph(100,1)   #產生一個BA無標度網路G4 nx.draw(G)                               #繪製網路G5 plt.savefig("ba.png")           #輸出方式1: 將映像存為一個png格式的圖片檔案6 plt.show()                            #輸出方式2: 在視窗中顯示這幅映像 

networkx 提供畫圖的函數有: draw(G,[pos,ax,hold]) draw_networkx(G,[pos,with_labels]) draw_networkx_nodes(G,pos,[nodelist]) 繪製網路G的節點圖 draw_networkx_edges(G,pos[edgelist]) 繪製網路G的邊圖 draw_networkx_edge_labels(G, pos[, ...]) 繪製網路G的邊圖,邊有label
---有layout 布局畫圖函數的分界線--- draw_circular(G, **kwargs) Draw the graph G with a circular layout. draw_random(G, **kwargs) Draw the graph G with a random layout. draw_spectral(G, **kwargs) Draw the graph G with a spectral layout. draw_spring(G, **kwargs) Draw the graph G with a spring layout. draw_shell(G, **kwargs) Draw networkx graph with shell layout. draw_graphviz(G[, prog]) Draw networkx graph with graphviz layout.

networkx 畫圖參數:
- node_size: 指定節點的尺寸大小(預設是300,單位未知,就是上圖中那麼大的點)
- node_color: 指定節點的顏色 (預設是紅色,可以用字串簡單標識顏色,例如'r'為紅色,'b'為綠色等,具體可查看手冊),用“資料字典”賦值的時候必須對字典取值(.values())後再賦值
- node_shape: 節點的形狀(預設是圓形,用字串'o'標識,具體可查看手冊)
- alpha: 透明度 (預設是1.0,不透明,0為完全透明)
- width: 邊的寬度 (預設為1.0)
- edge_color: 邊的顏色(預設為黑色)
- style: 邊的樣式(預設為實現,可選: solid|dashed|dotted,dashdot)
- with_labels: 節點是否帶標籤(預設為True)
- font_size: 節點標籤字型大小 (預設為12)
- font_color: 節點標籤字型顏色(預設為黑色)
e.g. nx.draw(G,node_size = 30, with_label = False)
繪製節點的尺寸為30,不帶標籤的網狀圖。

networkx 畫圖參數:
- node_size: 指定節點的尺寸大小(預設是300,單位未知,就是上圖中那麼大的點)
- node_color: 指定節點的顏色 (預設是紅色,可以用字串簡單標識顏色,例如'r'為紅色,'b'為綠色等,具體可查看手冊),用“資料字典”賦值的時候必須對字典取值(.values())後再賦值
- node_shape: 節點的形狀(預設是圓形,用字串'o'標識,具體可查看手冊)
- alpha: 透明度 (預設是1.0,不透明,0為完全透明)
- width: 邊的寬度 (預設為1.0)
- edge_color: 邊的顏色(預設為黑色)
- style: 邊的樣式(預設為實現,可選: solid|dashed|dotted,dashdot)
- with_labels: 節點是否帶標籤(預設為True)
- font_size: 節點標籤字型大小 (預設為12)
- font_color: 節點標籤字型顏色(預設為黑色)
e.g. nx.draw(G,node_size = 30, with_label = False)
繪製節點的尺寸為30,不帶標籤的網狀圖。

 

布局指定節點排列形式

pos = nx.spring_layout

建立布局,對圖進行布局美化,networkx 提供的布局方式有:
- circular_layout:節點在一個圓環上均勻分布
- random_layout:節點隨機分布
- shell_layout:節點在同心圓上分布
- spring_layout: 用Fruchterman-Reingold演算法排列節點
- spectral_layout:根據圖的拉普拉斯特徵向量排列節
布局也可用pos參數指定,例如,nx.draw(G, pos = spring_layout(G)) 這樣指定了networkx上以中心放射狀分布. 繪製劃分後的社區

先看一段代碼,代碼源自site

partition = community.best_partition(User)size = float(len(set(partition.values())))pos = nx.spring_layout(G)count = 0.for com in set(partition.values()) :    count = count + 1.    list_nodes = [nodes for nodes in partition.keys()                                if partition[nodes] == com]                     nx.draw_networkx_nodes(G, pos, list_nodes, node_size = 50,                                node_color = str(count / size))nx.draw_networkx_edges(User,pos,with_labels = True, alpha=0.5 )plt.show()

communit.best_partition 是社區劃分方法,演算法是根據Vincent D.Blondel 等人於2008提出,是基於modularity optimization的heuristic方法.
partition的結果存在字典資料類型:
{'1': 0, '3': 1, '2': 0, '5': 1, '4': 0, '6': 0}
單引號裡的資料是key,也就是網路中節點編號。
冒號後面的數值,表示網路中節點的編號屬於哪個社區。也就是社區標號。如'6': 0表示6節點屬於0社區

list_nodes = [nodes for nodes in partition.keys() if partition[nodes] == com] 

每次迴圈list_nodes結果是社區i對應的使用者編號。
如第一次迴圈結果是com = 0, list_nodes= ['1','2','4','6']
第二次迴圈的結果是com = 1, list_nodes = ['3','6']
這樣每次迴圈,畫出一個社區的所有節點:

nx.draw_networkx_nodes(G, pos, list_nodes, node_size = 50,                                node_color = str(count / size))

迴圈結束後通過顏色來標識不同社區.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.