2017-06-15 104 views
0

我使用igraph繪製SQL Server的圖形。我提供作爲輸入的3列的表格:R igraph:按列內容的顏色頂點

from to  color 
Node1 NodeA red 
Node1 NodeB green 
Node1 NodeC blue 
Node2 NodeD red 
Node2 NodeE green 

我的[R腳本是這樣的:

require(igraph) 
g <- graph.data.frame(graphdf) 
V(g)$label.cex <- 2 
png(filename = "'[email protected]+'", height = 3000, width = 3000, res = 100); 
plot(g, vertex.label.family = "sans", vertex.size = 5) 
dev.off() 

該地塊的邊緣將顯示所需的顏色,但頂點自己不會做 - 理想,我希望'to'頂點是'color'列中指定的顏色。我不在乎'從顏色(它可以是默認的橙色)。

我試着添加此(和變化):

V(g)$color <- graphdf[V(g), 3] 

巴新前行,但生產什麼似乎是隨機的頂點顏色。

回答

2

這取決於你如何創建你的graphdf。列是字符串還是因素?我將針對這兩種情況展示解決方案。

graphdf包含字符串

library(igraph) 

## Create data 
graphdf = read.table(text="from to  color 
Node1 NodeA red 
Node1 NodeB green 
Node1 NodeC blue 
Node2 NodeD red 
Node2 NodeE green", 
header=TRUE, stringsAsFactors=FALSE) 
g <- graph.data.frame(graphdf) 

我會讓所有的節點是橙色,但後來調整色調爲目的節點。

## Make default color orange 
V(g)$color = "orange" 
V(g)[graphdf$to]$color = graphdf$color 

Graph 1

graphdf包含的因素

的混亂情況是,如果你允許所有的字符串,成爲因素。唯一的區別是,您在使用它們時必須將as.character應用於所有因素。

graphdf = read.table(text="from to  color 
Node1 NodeA red 
Node1 NodeB green 
Node1 NodeC blue 
Node2 NodeD red 
Node2 NodeE green", 
header=TRUE) 
g <- graph.data.frame(graphdf) 

V(g)$color = "orange" 
V(g)[as.character(graphdf$to)]$color = as.character(graphdf$color) 
plot(g) 
+0

數據是從SQL SELECT提供的,並作爲參數提供給sp_execute_external_script,所以我不知道它是否包含因子。事實證明,第二個解決方案完美運作。謝謝! –

+0

順便說一下,'str(graphdf)'會告訴你它們是字符串還是因素。 – G5W