如何做出漂亮的複雜網路關係圖?

在UMAP論文中看到其中的配圖都非常漂亮,希望在數學建模中可以配上這樣比較Fancy的圖(比如下面兩圖),但是不知道用什麼軟體可以比較方便快捷的做出,同時做出的效果又還不錯?UCINET可以做出比較好的效果嗎?


……更新於2016.3.20號,附上所有代碼……

最近剛用R的igraph包和networkD3完成了一個項目的可視化內容(前者是靜態的後者是動態的),感覺還是比較好看的哈哈(溫馨提示,調亮手機) 。
:)

———————————————分割線——————————————
那現在我們來理一下思路,要做出這個效果其實真的一點都不難,現在再翻看剛開始學習時候寫的代碼……真的是……Naive哈哈。沒有一個循環一個function就能直接出圖的,不信你看——

```{r}

setwd("d:/Rproject")

set.seed(200)

App.use&<-read.table("app_data.txt",header = FALSE,sep= ",",

colClasses
=c("character","character"))

g1&<-na.omit(App.use)

```

#

# 說明

設定工作目錄;

設定種子節點,同一種布局畫出來的圖就是可以重複,不然即使同一種布局,展現的時候 由於位置的隨機也會呈現出不一樣的結果;

去除NA值,清除了若干條包含有缺失值的信息。

#

```{r}

library(igraph)

g2 =
graph.data.frame(d =g1, directed = F);

V(g2)

E(g2)

x&<-par(bg="white")

graph.density(g2)

V(g2)$bte =
betweenness(g2, directed = F)

par(mar = c(0, 2,
0, 0))

plot(V(g2)$bte)

```

#

# 說明

載入igraph包,這個包是R中對複雜網路的一個解決包;

對數據進行格式轉化,我選擇的數據是沒有方向度量的數據;

這兩者都使社會網路分析的函數代碼,分別代表定點和邊;

將背景設置為白色;

可以查詢群體的中心密度,並畫出相應的圖。

#

```{r}

x&<-par(bg="black")

V(g2)$size = 5

V(g2)[bte&>=1000]$size
=10

V(g2)[bte&<=100]$size =2

plot(g2,layout=layout.fruchterman.reingold,

vertex.label=NA,edge.arrow.size=1)

V(g2)[bte&>=1000]


# 說明

背景圖設置為黑色;

根據節點中心度的圖,現做以下處理;

①將中心度高於1000的節點的大小設置為10;

②將中心度低於100的節點的大小設置為2;

③將中心度在100到1000的節點的大小設置為5;

從圖中也可以直觀地看出,中間度最高的幾個節點,確實位於中介的地位具體看這六個點,分別是微信、百度地圖、淘寶、優酷、QQ和360。


```{r}

plot(g2,layout=layout.fruchterman.reingold,
vertex.size=V(g2)$size,vertex.label=V(g2)$V1)


plot(g2,layout=layout.fruchterman.reingold,vertex.size=V(g2)$size,

vertex.color=rgb(0.2,1,0.8,0.6),vertex.label=NA,edge.arrow.size=1)

```

# 說明

標籤數量太多,圖形看的很亂,因此開始用layout的函數進行調試;

vertex.size即點的大小;vertex.color是點的顏色;

vertex.label即標籤名,因為太多所以捨棄;

edge.arrow.size沒試出來,不知道是不是因為數據的原因;

此外還有vertex.label.cex、edge.color、edge.arrow.mode、edge.arrow.size等參數;

由於這個網路並不存在方向,所以size沒法使用;

另外調節線的寬度可以用下面這種方法單獨將「E(g2)$w=」列出來。

#

```{r}

com =
walktrap.community(g2,steps=5,merges = TRUE,

modularity = TRUE,
membership = TRUE)

V(g2)$sg=com$membership

V(g2)$color=rainbow(max(V(g2)$sg),alpha=0.6)[V(g2)$sg]

E(g2)$color=rgb(0.3,0.6,1,0.2)

```

#

# 資料

Igraph包中社區分類函數有以下幾種:

fastgreedy.community

spinglass.community

edge.betweenness.community

leading.eigenvector.community

walktrap.community

label.propagation.community

clique.community

multilevel.community

# 說明

不同的分類演算法,速度和適用社區網路大小都有所側重;

對於同一網路,採用什麼樣的分類演算法需要實踐後去人工判斷是否符合預期;

step類似於一種閾值,值越大劃分的約粗糙,由於本身數據的量不大,所以step取值較小;

第一行是特殊用法,sp即為subgroup;

其中rainbow即點的顏色,除了這種表達方式之外還能用rainbow(10, 0.8, 0.8, alpha=0.6);

[V(g2)$sg]實驗之後感覺是對顏色的排序進行定義,將相同的類別以相同的顏色表現。


#

```{r}

plot(g2,layout=layout.fruchterman.reingold,
vertex.size=V(g2)$size,


vertex.color=V(g2)$color,
edge.w=2,edge.arrow.size=0,


vertex.frame.color=NA,margin= rep(0, 1),

vertex.label=NA)


```

# 說明

設置點的大小為之前的值,點的顏色為之前設置為彩虹色,具體的參數還不熟悉,無箭頭標度;

設置邊得顏色為RGB,寬度為2,透明度為20%,具體數值可調整,邊界方位在0和1之間。

# 環形單色虹


```{r}

sg1 &<- cluster_spinglass(g2, spins=6, gamma=2.0)

layout=layout.circle

E(g2)$color=rgb(0.3,0.6,1,0.4)

plot(g2,
layout=layout, vertex.size=V(g2)$size, vertex.label=NA,edge.w=1,

vertex.color= rgb(0.3,0.6,1,0.4))

```

# 環形彩虹

```{r}

E(g2)$color=V(g2)[name=ends(g2,E(g2))[,2]]$color

plot(g2,
layout=layout, vertex.size=V(g2)$size, vertex.label=NA,edge.w=1,

vertex.color= rainbow(10, 0.8, 0.8,
alpha=0.8)[sg1$membership])

```

# 單色球體結構的社會網路分布

```{r}

sg1 &<- cluster_spinglass(g2, spins=6, gamma=2.0)

layout=layout.sphere

E(g2)$color=rgb(0.3,0.6,1,0.4)

plot(g2,
layout=layout, vertex.size=V(g2)$size, vertex.label=NA,edge.w=1,

vertex.color= rgb(0.3,0.6,1,0.4))

```

# 多色球體單色線條結構的社會網路分布

```{r}


sg1 &<- cluster_spinglass(g2, spins=6, gamma=2.0)

layout=layout.sphere

E(g2)$color=rgb(0.3,0.6,1,0.4)

plot(g2,
layout=layout, vertex.size=V(g2)$size, vertex.label=NA,edge.w=1,

vertex.color=rainbow(10, 0.8, 0.8,
alpha=0.6)[sg1$membership])

```

#多色球體多色線條結構的社會網路分布

```{r}

sg1 &<- cluster_spinglass(g2, spins=6, gamma=2.0)

layout=layout.sphere

E(g2)$color=V(g2)[name=ends(g2,E(g2))[,2]]$color

plot(g2, layout=layout,
vertex.size=V(g2)$size, vertex.label=NA,edge.w=1,

vertex.color=rainbow(10, 0.8, 0.8,
alpha=0.6)[sg1$membership])

```

#

如果看到這了,覺得有用有幫助的,請點個贊加個關注唄:)
畢竟我只是一個關注不過3位數還在不斷默默耕耘的「知乎良民」
:)


多圖預警!!!

  • 突出顯示重要節點

  • 不同分組不同顏色

  • 各種layout

  • 有向曲線邊,節點大小,節點標籤大小,只有想不到,沒有做不到

    當然了,邊粗細,邊標籤,邊顏色,曲邊曲率,節點顏色等等各種都可以設置,詳情請移步http://afternone.github.io/GraphPlot.jl/


謝邀
可能滿足你的需求的軟體是Gephi,顯示效果應該可以算作fancy,而且Ucinet中的.net文件格式可以直接導入Gephi中。 Ucinet可以做到上述第二幅圖的效果,對線條粗細顏色、箭頭大小、結點顏色、標籤字體大小、分布方式進行調節。Ucinet的計算分析功能是很強大的,但是顯示效果個人覺得一般,Gephi在這方面做得更好。

題主的目的是要好看並且方便快捷。個人的理解可視化效果要好主要是三個要素:
1.數據量。同樣的方法,同樣的設置,數據量的增大無疑會大大增加信息量和展示效果。
2.可視化信息:結點形狀顏色和大小 連接線條粗細顏色及箭頭 標籤字體顏色及大小。這裡面的每一個部分都需要根據表達目的進行調整和區分,而整體的效果是它們組合的結果,所以這一部分的調整比較耗時。
3.後期調整。布局方面,一般的軟體都有設定的布局演算法,進行選擇即可。選擇完後,自己再進行微調。此外,自己如果有額外的信息想顯示,可以加以PS,如上面的第一幅圖中的小圖片應該是後期調整的結果。

對於方便快捷方面,個人覺得以上的兩個軟體都還可以,基本都可以設置得到。當然,做網路圖的小軟體有很多特別是國外,論文應該也是發現這寫小軟體的途徑,個人使用經歷也很有限只是提供一個可能的方法。最後提一句,漂亮是重要的,不過弄清楚自己想要表達哪些信息是可視化的第一步,也是非常重要的一步。

以上。希望能幫到你。


一般用R中的igraph包就可以實現。不過需要自己仔細調校。同時像mathematica應該這是可以直接做類似的圖。


Gephi是一個入門級別的工具,夠傻瓜,上手容易
R語言中的iGraph和networkD3包也足夠優秀,可以滿足你絕大多數的畫圖需要。
Processing和Photoshop是在此基礎上畫出更多效果的工具,前者將靜態圖做成動畫,後者不僅可以做成動畫,還可以增加很多的渲染。

網路可視化現在已經有很多工具,但是如何畫圖,還有專門研究展示演算法的工作,比如R語言包中iGraph調用時的random-layout是一種演算法,再比如Gephi中也提供了幾種常用的展示演算法,如果你下載Gephi的插件還可以得到更多的展示演算法等。


Gephi可以比較容易地實現網路可視化
如果你用Python,有個package叫networkx也不錯
更自由同時需要寫更多code的方式是使用D3


R語言畫網路圖三部曲之networkD3 | 生信菜鳥團

上面這個講的不錯,方法很傻瓜,看了這個之後基本就會用network3D了


echarts可以實現。


Hausmann的產品空間網路么。。用netdraw能畫,但是這種中心邊緣結構看不出來;而且容易這軟體節點一多容易卡。他這個應該是R中的igraph包做的(其他軟體做不了這麼好看)


建議用cytoscape,數據量處理比gephi大,穩定性也好很多。

編程的話就用python + networkx


用python的話可以直接調networkx

g = networkx.Graph()
a = [1,1,1,1,1,1,1,1,1,1,1,1,2,2,2]
b = [11,22,33,44,55,234,56,88,90,98,123,345,98,123,345]
c = [111,111,1111,122,122,122,134,1234,12424,111,123,123,2,2,2]
g.add_edges_from(zip(b,a))
g.add_edges_from(zip(b,c))
networkx.draw(g)
matplotlib.pylot.show()

作為一個調包俠的我…………,覺得這包畫關聯圖譜真是太方便了


Gephi吧,簡單易用,本人藉助其做市場競爭分析。


推薦使用D3


耶!感覺跟房屋平面設計差不多


igraph這個包就很好用的。


Julia挺方便的


真棒!


Gephi 我邊上的數據分析師就用,圖形化操作也比較方便。


推薦閱讀:

數學建模論文套路總結?
學數學的邏輯怎麼培養?
如何構建一個表面積無限而體積有限的模型?
請教C4D大神,這樣的圖應該怎樣建模?
怎樣能紮實自己的數學基礎還有提高數學成績?

TAG:數學建模 | 繪圖 | 複雜網路 | 繪圖軟體 | 論文插圖 |