2015-12-28 36 views
0

我想基於數據框中的額外列在iGraph中設置頂點的顏色。我在搜索中沒有看到這樣的問題。儘管我最後一次想到了,並最終提出了一個重複的問題。我的數據如下:如何根據數據框中的列設置頂點顏色iGraph?

Vertex1  Vertex2 Type 
Chat  Forms  Other 
Specials Chat  Info 
Form Sent Linkout Lead 
Home  Chat  Home 

我想根據類型列的內容設置頂點的值。這裏是我使用的代碼:

V(paths.g)$Type=as.character(VDP_Path5$Type[match(V(paths.g)$Type,VDP_Path5$Node1)]) 
V(paths.g)$color=V(paths.g)$Type 
V(paths.g)$color=gsub("Lead","forest",V(paths.g)$color) 
V(paths.g)$color=gsub("Vehicle","leaf",V(paths.g)$color) 
V(paths.g)$color=gsub("Home","gold",V(paths.g)$color) 
V(paths.g)$color=gsub("Other","silver",V(paths.g)$color) 

plot(paths.g, edge.width=VDP_Path5$weight,layout=layout.fruchterman.reingold) 

當我運行的情節所有的頂點是默認的青色。

謝謝

+0

'gsub'函數有什麼作用? –

+0

gsub是R中的模式匹配和替換函數。一般用法是'gsub(pattern,replacement,x)' – TimL

+0

對不起,你能幫我理解他們在這種情況下做什麼嗎? –

回答

3

你需要的東西是這樣的:

edges <- c(1,2, 3,4, 2,4, 1,3, 1,5) 
g <- make_graph(edges, directed=FALSE) 
plot(g, vertex.color=1:5) 

添加顏色作爲頂點屬性是沒有必要的,但是打印時就可以像vertex.color=V(g)$color。也有更直接的方法來將文本轉換爲特定的顏色(我會去找一個命名的顏色矢量)。

如果您想要更精確的建議,請使您的數據/代碼具有重複性:-)

+0

我正在嘗試將頂點設置爲幾種不同的顏色以幫助區分活動。我懷疑你想看到167個邊緣的整個列表。所提供的數據代表數據框中的完整列表。 – TimL

+0

我的意思是'dput(head(data))'。使用dput輸出進行測試很容易。 –

+0

這不回答我的問題。我也嘗試了一個嵌套的ifelse語句,但它似乎也沒有任何區別。 (V(paths.g))$ Type =='Lead',「green4」, ifelse(V(paths.g)$ Type =='Vehicle' ,「greenyellow」, ifelse(V(paths.g)$ Type =='Home',「gold」,「grey70」)))' – TimL

相關問題