根据igraph中的节点属性修改节点的阴影?

时间:2018-12-15 02:58:22

标签: r igraph

因此,我目前有一个在igraph中创建的社交网络图。它具有50个具有80个唯一连接的节点。每个节点都有1个属性:'A',它是1到10之间的一个随机数。是否有办法将节点的颜色设置为一件(红色),然后根据'A'的值修改阴影?

V(net)$color=V(net)$A
V(net)$color=gsub(1,"red",V(net)$color) 
V(net)$color=gsub(2,"pink",V(net)$color)

我目前使用的是这种代码的一种形式,但理想情况下我想要一些东西,以使'A'的值越高,红色的阴影越暗。所以当V(net)$ A == 10时,它是真正深红色,但当V(net)$ A == 1时,它将变成几乎白色的浅粉红色。有没有无需手动将不同阴影插入上述代码中的代码?

1 个答案:

答案 0 :(得分:1)

我认为不存在用于生成颜色阴影的基本R函数。显然,各种R包中都有这样的功能和调色板。但是我们可以改为使用以下

myShade <- function(i, n = 10) {
  upper <- c(110, 0, 0)
  lower <- c(255, 210, 210)
  shade <- round(lower + (i - 1) * (upper - lower) / (n - 1))
  paste(c("#", sprintf("%02s", as.hexmode(shade))), collapse = "")
}

barplot(table(letters[1:10]), col = sapply(1:10, myShade))

enter image description here

这里i是1到10的整数,而n是阴影的总数。但是,更一般而言,您可以将n = 1i设置为[0,1]中的任何实数,这会给您带来很多阴影(由于四舍五入的缘故,不是无限多个)在shade中。

然后upperlower分别对应RGB格式的暗红色和浅红色。通过更改它们,您可以直接更改调色板。然后shade进行插值,最后一行构造一个十六进制代码,例如

myShade(5)
# [1] "#bf7575"

那我想你可以做到

V(net)$color <- sapply(V(net)$A, myShade) # or as.numeric(V(net)$A) if V(net)$A is a character