Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iGraph(R)-有条件地更改边的颜色或权重_R_Igraph_Graph Visualization - Fatal编程技术网

iGraph(R)-有条件地更改边的颜色或权重

iGraph(R)-有条件地更改边的颜色或权重,r,igraph,graph-visualization,R,Igraph,Graph Visualization,我试图根据对应于特定节点的标志的值来更改图形中节点的颜色。例如,请参见下面的edgelistHAVE: ego friend realfriend resources Joe Jim 1 2 Joe Jon 1 1 Joe James 1 5 Sam Jeff 1 2 Sam Stephanie 1

我试图根据对应于特定节点的标志的值来更改图形中节点的颜色。例如,请参见下面的edgelist
HAVE

ego friend  realfriend  resources
Joe Jim              1          2
Joe Jon              1          1
Joe James            1          5
Sam Jeff             1          2
Sam Stephanie        1          3
Sam Joe              1          1
Sam Jim              1          1
Bob Dylan            0          1
Bob Jim              1          4
Dylan是一个虚构的朋友,所以我希望代表他(和其他虚构的朋友)的节点不同于
realfriend
=1。我将
HAVE
转换为如下图:

test <- graph.data.frame(HAVE, directed=F)
plot(test, vertex.size=degree(test))

知道为什么这不起作用吗?

图表的数据显示在末尾

有很多事情需要调整才能得到你想要的。首先,正如我在评论中指出的,在您构建它时,
realfriend
是边的属性,而不是顶点。要能够为顶点着色,需要顶点的属性。我相信你的意思是,在HAVE$ego(第一栏)中列出的每个人都是真实的。HAVE$realfriend是HAVE$friend(第二列)是否为真的指示器。所以我们需要把它从边转移到顶点。然后我们可以使用类似您的代码的东西为顶点指定颜色,但是还有其他一些小问题需要解决。您可以使用V(test)$realfriend索引到颜色列表中。但是(一旦我们创建它)V(test)$realfriend接受0或1的值。没有颜色0。我们需要颜色1或2,所以当使用它作为颜色的索引时,我将一个添加到V(test)$realfriend。此外,绘制的某些顶点非常小,因此很难分辨它们是什么颜色。我保持大小与度成比例,但使顶点更大。所以,把这些放在一起:

library(igraph)
test <- graph.data.frame(HAVE, directed=F)

## label the vertices with reality
for(i in 1:ecount(test)) {
    E = ends(test, E(test)[i])
    V(test)[E[1]]$realfriend = 1
    V(test)[E[2]]$realfriend = HAVE$realfriend[i]
}

colrs <- c("red", "blue")
V(test)$color <- colrs[V(test)$realfriend+1]

plot(test, vertex.size=degree(test)*6)

V(测试)$realfriends
未定义。首先,这是一个打字错误。拥有真正的朋友不是真正的朋友。但更糟糕的是,这使realfriend成为边的属性,而不是顶点的属性。请尝试
vertex\u attr(test)
edge\u attr(test)
刚刚修复了拼写,谢谢。这些简单的函数非常有启发性——我一直对igraph对象的结构感到困惑,但并没有什么东西开始发出咔哒声。非常感谢。我将编辑我的Q,以确保它仍然是一个有效的问题。这非常有帮助。谢谢你的回答+所有的直觉建设
library(igraph)
test <- graph.data.frame(HAVE, directed=F)

## label the vertices with reality
for(i in 1:ecount(test)) {
    E = ends(test, E(test)[i])
    V(test)[E[1]]$realfriend = 1
    V(test)[E[2]]$realfriend = HAVE$realfriend[i]
}

colrs <- c("red", "blue")
V(test)$color <- colrs[V(test)$realfriend+1]

plot(test, vertex.size=degree(test)*6)
HAVE = read.table(text="ego friend  realfriend  resources
Joe Jim              1          2
Joe Jon              1          1
Joe James            1          5
Sam Jeff             1          2
Sam Stephanie        1          3
Sam Joe              1          1
Sam Jim              1          1
Bob Dylan            0          1
Bob Jim              1          4",
header=TRUE)