2017-01-08 137 views
0

我想使用類似以下,但這樣多的示例數據進行網絡更大R:如何改變顏色和形狀中的igraph

data <- structure(list(V1 = structure(c(1L, 1L, 1L, 1L, 5L, 5L, 6L, 2L, 
4L, 4L, 3L, 7L), .Label = c("A", "AB", "AD", "AN", "B", "D", 
"GDH"), class = "factor"), V2 = structure(c(4L, 5L, 6L, 5L, 6L, 
5L, 5L, 1L, 2L, 3L, 3L, 7L), .Label = c("AC", "AD", "AG", "B", 
"C", "D", "THG"), class = "factor")), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA, 
-12L)) 


library(igraph) 
g = graph.data.frame(data) 
plot(g) 

這給了我這個

enter image description here

我想要的是 1-改變每個羣集的顏色和形狀(如THG和GDH變成藍色),但更喜歡隨機,因爲當數據是巨大的逐一應用它將不適合

2-刪除名稱內而不是把一個數接近基於它們在例如數據順序上

A B 
A C 
A D 
A C 
B D 
B C 
D C 

是1

AB AC 

是2

等等等等

+0

您在詢問之前是否檢查過文檔?有關如何操作'V(g)$ color'和其他參數,請參見'igraph :: igraph.plotting'。 –

+0

@Fr。在您投票前仔細閱讀我的問題。如果我想手動操作,我可以通過'V(g)$ color'我說這很難做,當數據很大時 – nik

+0

我剛剛讀過你的問題,我仍然無法看到什麼是阻止您使用igraph繪圖參數對節點進行着色。也許你可以(1)給出你的數據的維度(「巨大」可能意味着很多東西),(2)顯示你使用「igraph」繪圖參數的嘗試(目前還不存在)? –

回答

1

這是一個90%的解決方案。除了組件標籤之外,它可以完成你想要的任何事情。

我認爲你所要做的就是獲取圖形的連通組件。這可通過{igraph}中的biconnected_components函數獲得。我使用它來構建一個向量,它指出每個頂點所在的組件。您可以使用vertex.xxx參數組修改頂點。下面,我使用組件編號更改顏色,形狀和標籤。

(更新包括形狀)

Components = biconnected_components(g)$components 
VComponent = rep(0, length(V(g))) 
for(i in 1:length(Components)) { VComponent[Components[[i]]] = i } 
plot(g, vertex.color=VComponent, vertex.label=VComponent, 
vertex.shape = shapes()[c(1:3,8)][VComponent]) 

Graph

默認形狀不允許了很多的變化,但它可以添加其他形狀。 This page顯示如何添加三角形和星形作爲選項。我用集羣號標記頂點。通過指定vertex.label = NA可以使頂點沒有標籤。但是你想在每個組件附近放置一個文本標籤。我看不出如何獲取組件的位置來放置文本,所以我標記了節點。

+0

你也可以改變每個集羣的形狀嗎? – nik

+0

是的,我會將其添加到答案中。 – G5W

+0

我接受了,我很喜歡你的答案,謝謝 – nik