0

我正在使用 igraph 从 SQL Server 绘制图表。我提供一个 3 列的表作为输入:

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 = "'+@outputFile+'", height = 3000, width = 3000, res = 100);
plot(g, vertex.label.family = "sans", vertex.size = 5)
dev.off()

绘图的边缘将以所需的颜色显示,但顶点本身不会 - 理想情况下,我希望“到”顶点是“颜色”列中指示的颜色。我不关心'from'的颜色(它可以是默认的橙色)。

我试过添加这个(和变体):

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

在 png 行之前,但这会产生看似随机的顶点颜色。

4

1 回答 1

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

图 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)
于 2017-06-15T19:11:14.597 回答