首页 > 解决方案 > 控制哪些节点改变大小 igraph

问题描述

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

这是一个小玩具示例

    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?

标签: rigraph

解决方案


这里有两个解决方案。

一个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)

在此处输入图像描述


推荐阅读