【问题标题】:Control which nodes to change size igraph控制哪些节点改变大小 igraph
【发布时间】:2020-09-24 12:08:50
【问题描述】:

这可能看起来很简单,但我无法做到这一点。我想使用截止点绘制两种类型的节点,小节点和大节点。值在属性度中。

这是一个小玩具示例

    g1 <- graph(edges=c(1,2, 2,3, 3, 1, 4,2), n=4, directed=F) %>%
    set_vertex_attr("names", value = LETTERS[1:4])
    g1_degree <- degree(g1, mode = "total")
     g1_degree
    [1] 2 3 2 1
    g1 <- set_vertex_attr(g1, "degree", value = g1_degree)
plot(g1, vertex.size=V(g1)$degree)

这给了我根据度数的每个节点,但我想要度数为 2 和 3 大和 1 小的节点。 所以我尝试编辑 V(g1)$degree

中的值
ifelse(V(g1)$degree < 2, yes = V(g1)$degree==1, no = V(g1)$degree==5)

假假假真

好的,我检查了我的学位值,但是如何使用我需要的截止值覆盖 TRUE 或 FALSE?

【问题讨论】:

  • 试试g1 &lt;- set_vertex_attr(g1, "degree", value = ifelse(V(g1)$degree &lt; 2, 1, 5))

标签: r igraph


【解决方案1】:

这里有两个解决方案。

一个ifelse,就像问题中一样。

g1 <- set_vertex_attr(g1, "degree", value = ifelse(V(g1)$degree < 2, 1, 5))

V(g1)$degree
#[1] 5 5 5 1

另一个是findInterval。这比 ifelse 具有更好的性能,后者在大型数据集中可能很重要。

i <- findInterval(V(g1)$degree, c(0, 2, Inf))
g1 <- set_vertex_attr(g1, "degree", value = c(1, 5)[i])

V(g1)$degree
#[1] 5 5 5 1

使用findInterval 索引c(10, 50)[i] 设置不同的新尺寸,图表将如下所示。

g1 <- set_vertex_attr(g1, "degree", value = c(10, 50)[i])
plot(g1, vertex.size = V(g1)$degree)

【讨论】:

  • 谢谢!我能够使用 ifelse 解决方案,以后肯定会检查 findInterval 函数。
猜你喜欢
  • 1970-01-01
  • 2023-01-14
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多