使用 RColorBrewer 根据顶点属性设置 igraph 顶点颜色

Set igraph vertex color based on vertex attribute using RColorBrewer

我在 iGraph 中有一个网络,它具有代表各种因素的多个顶点属性。当我根据特定属性绘制图形时,我想为顶点着色。类似于您在 ggplot 中使用 color = variable 的方式。

plot()中的参数vertex.color可用于设置网络内所有顶点的顶点颜色,或者它可以接受RGB值并为每个顶点设置顶点颜色。

我已经看到 RColorBrewer 作为创建托盘的一种方式,但我不确定如何将其映射回顶点属性。我也不想对每个属性值的颜色进行硬编码,因为我有多个属性,每个属性都有不同的级别数。

library(igraph)
library(RColorBrewer)

# create an example network
g <- make_ring(5)

# assign vertex attributes
g <- set.vertex.attribute(g, 'group', 1, 'A')
g <- set.vertex.attribute(g, 'group', 2, 'A')
g <- set.vertex.attribute(g, 'group', 3, 'B')
g <- set.vertex.attribute(g, 'group', 4, 'B')
g <- set.vertex.attribute(g, 'group', 5, 'C')

# create color pallet based on unique values for vertex attribute
pal <- brewer_pal(length(unique(V(g)$group)), "Dark2")

# plot network
plot(g, vertex.color = "gray")

打字错误?至少在我的 RColorBrewer 版本中它是 brewer.pal 而不是 brewer_pal

我们想将 group 属性的值用于 select 您生成的调色板中的颜色,但这些值是字符串,而不是数字。一种方法是将字符串转换为因子,然后将它们用作数字。这会将每个唯一的字符串值转换为唯一的数值。我们可以用它来 select 颜色。

plot(g, vertex.color = pal[as.numeric(as.factor(vertex_attr(g, "group")))])