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
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)
数据是从SQL SELECT提供的,并作为参数提供给sp_execute_external_script,所以我不知道它是否包含因子。事实证明,第二个解决方案完美运作。谢谢! –
顺便说一下,'str(graphdf)'会告诉你它们是字符串还是因素。 – G5W