【问题标题】:iGraph (R) - conditionally changing the color or weight of an edgeiGraph (R) - 有条件地改变边缘的颜色或重量
【发布时间】:2018-05-29 21:38:19
【问题描述】:

我正在尝试根据与特定节点对应的标志的值来更改图中节点的颜色。例如,请参阅下面的 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 的值使节点显示为不同的颜色时,图表不会产生任何颜色变化:

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

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

【问题讨论】:

  • V(test)$realfriends 未定义。首先,这是一个错字。有真正的朋友而不是真正的朋友。但更糟糕的是,这使得 realfriend 成为边的属性,而不是顶点。试试vertex_attr(test)edge_attr(test)
  • 刚刚修正了拼写,谢谢。那些简单的功能非常有启发性——我一直对 igraph 对象的结构感到困惑,但事情并没有开始点击。谢谢!
  • 我会编辑我的 Q 以确保它仍然是一个有效的问题

标签: r igraph graph-visualization


【解决方案1】:

图表的数据显示在最后。

有很多事情需要调整才能得到你想要的。首先,正如我在 cmets 中指出的那样,在您构建它时,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)

请注意,Dylan 是红色的,其余的是蓝色的。

数据

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)

【讨论】:

  • 这非常有帮助。感谢您的回答+所有的直觉构建
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 2020-11-03
相关资源
最近更新 更多