1. 程式人生 > >networkx筆記:繪製基本網路圖

networkx筆記:繪製基本網路圖

繪製基本網路圖

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

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

networkx 提供畫圖的函式有:

  1. draw(G,[pos,ax,hold])
  2. draw_networkx(G,[pos,with_labels])
  3. draw_networkx_nodes(G,pos,[nodelist]) 繪製網路G的節點圖
  4. draw_networkx_edges(G,pos[edgelist]) 繪製網路G的邊圖
  5. draw_networkx_edge_labels
    (G, pos[, ...]) 繪製網路G的邊圖,邊有label
    ---有layout 佈局畫圖函式的分界線---
  6. draw_circular(G, **kwargs) Draw the graph G with a circular layout.
  7. draw_random(G, **kwargs) Draw the graph G with a random layout.
  8. draw_spectral(G, **kwargs) Draw the graph G with a spectral layout.
  9. draw_spring(G, **kwargs) Draw the graph G with a spring layout.
  10. draw_shell(G, **kwargs) Draw networkx graph with shell layout.
  11. 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,不帶標籤的網路圖。

佈局指定節點排列形式

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))

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

http://segmentfault.com/a/1190000000527216

相關推薦

networkx筆記繪製基本網路

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

用Python的networkx繪製精美網路

最近因為數學建模3天速成Python,然後做了一道網路的題,要畫網路圖。在網上找了一些,發現都是一些很基礎的醜陋紅點圖,並且關於網路的一些演算法也沒有講,於是自己進http://networkx.github.io/學習了一下。以下僅博主自己的總結,勿認真,有錯

筆記git基本操作

基本概念 位置 bar 回退 let 管理 文件夾 私有 推送 原文: http://www.cnblogs.com/pingwen/p/8098035.html 1. 快速入門的基本概念 相比SVN,TFS等集中式的版本管理系統,GIT分布式管理最重要的理

pytorch筆記05)UNet網路簡單實現

語義分割的相關介紹可參考該部落格: https://blog.csdn.net/u012931582/article/details/70314859 程式碼參考圖1設計,黑色加粗的標註是筆者新增的,和程式碼中的變數對應 圖1 Unet

pytorch筆記04)resnet網路&解決輸入影象大小問題

因為torchvision對resnet18-resnet152進行了封裝實現,因而想跟蹤下原始碼(^▽^) 首先看張核心的resnet層次結構圖(圖1),它詮釋了resnet18-152是如何搭建的,其中resnet18和resnet34結構類似,而resnet50-resnet1

Spark學習筆記DStream基本工作原理

DStream基本工作原理 DStream是Spark Streaming提供的一種高階抽象,英文全稱為Discretized Stream,中文翻譯為離散流,它代表了一個持續不斷的資料流。DStream可以通過輸入資料來源(比如從Flume、Kafka中)來建立,也可以通

筆記《Python網路爬蟲》

 引自:《手把手教你寫網路爬蟲》 頁面資料提取 簡單的text文字提取 通過 F12, Ctrl+Shift+C 快捷鍵從網頁中直接抓取資料 程式碼如下: from urllib.request import urlopen from bs4 import Beautifu

個人筆記linux基本操作-進階操作

系統版本:centos6.7 檢視IP:ifconfig 軟體資訊:java -version 安裝記錄:yum list installed |grep java 安裝rpm檔案:rpm -ivh  建立檔案:mkdir +目錄 移除:yum -y remove **

storm筆記storm基本概念

本文主要介紹storm中的基本概念,從基礎上了解strom的體系結構,便於後續程式設計過程中作為基礎指導。主要的概念包括: topology(拓撲) stream(資料流) spout(水龍頭、資料來源) bolt(螺栓,資料篩選處理) stream g

用Graphviz繪製好看網路

label換行直接用\n即可位置使用labelloc=b表示放在底部和節點的距離可以用HTML label來實現 Phone[shape=none, label=< <BR/> <BR/> <BR/> <BR/> <

使用Pycaffe繪製Caffe網路

檢驗Caffe能否在Python中使用,我們可以在Python中試著import caffe。 import caffe 如果成功的話就可以直接跳到文末看畫圖就好了,失敗的話往往會顯示: ImportError: No module named _

音訊特徵(3)繪製語譜

之前小程介紹過怎麼繪製音訊的波形圖(指振幅圖),振幅是聲音的一個特徵,反應了聲音能量的大小。頻率,是聲音的另一個特徵,反應了聲音音調的高低。對頻率的直觀描述或分析,需要使用到語譜圖等手段。 本文介紹如何通過python的pyplot來繪製音訊的語譜圖, 正如使用pyplot來繪製波形圖一樣。 語譜圖,也就是語

【TensorFlow學習筆記】5variable_scope和name_scope,基本操作

學習《深度學習之TensorFlow》時的一些實踐。 variable_scope 一般的巢狀 上節有學到在巢狀scope中的變數,一般是: import tensorflow as tf # with tf.variable_scope("scopeA") as

《大話數據結構》筆記(7-3)--的遍歷

結構 圖的遍歷 -- 前序遍歷 pan 鄰接矩陣 時間 earch img 第七章 圖 圖的遍歷 從圖中某一個頂點出發訪遍圖中其余頂點,且使每一個頂點僅被訪問一次,這一過程就叫做圖的遍歷(Traversing Graph)。 深度優先遍歷(Depth Fir

學習筆記矩陣的基本運算的實現

for int size data stdin mat 轉置 span font 2017-09-05 21:33:33 writer:pprp 昨天開始就上課了,沒有整天整天的時間去編代碼了,充分抓住每天晚上的時間吧, 今天下午預習了一下線性代數中矩陣最基本的運算,今晚就

Python學習筆記_零零一Python基本介紹

交易 社交 數據 lips engine 探討 認識 hive 初學者 Python介紹 Python 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。Python 的設計具有很強的可讀性,相比其他語言經常使用英文關鍵字,其他語言的一些標點符號,它具有比其他

學習筆記python3,一些基本語句(2017)

val from 列表 除法 方法 是否 主程 return tuple 數學運算 1、整除、取模 a = 36 b = 10 c = d = 0 c = a//b #取整除 - 返回商的整數部分 d = a % b #取模 - 返回

Oracle-4 - 超級適合初學者的入門級筆記plsql,基本語法,記錄類型,循環,遊標,異常處理,存儲過程,存儲函數,觸發器

個人 就會 逗號 n) 循環結構 less 寫上 所有 targe 初學者可以從查詢到現在的pl/sql的內容都可以在我這裏的筆記中找到,希望能幫到大家,視頻資源在 資源, 我自己的全套筆記在 筆記 在pl/sql中可以繼續使用的sql關鍵字有:update delet

HTML學習筆記基本結構

oot sid html htm body nav 無序 獨立 ade <head>:頭部 <body>:主體 <title>:標題 <h1>:分級標題 <hgroup>:分級標題分組 <header>

Scala筆記整理(一)scala基本知識

大數據 Scala [TOC] Scala簡介 Scala是一門多範式(multi-paradigm)的編程語言,設計初衷是要集成面向對象編程和函數式編程的各種特性。 Scala運行在Java虛擬機上,並兼容現有的Java程序。 Scala源代碼被編譯成Java字節碼,所以它可以運行於JVM之上,並