R igraph:按列内容的颜色顶点

问题描述:

我使用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] 

巴新前行,但生产什么似乎是随机的顶点颜色。

这取决于你如何创建你的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