使用RColorBrewer基于顶点属性设置igraph顶点颜色

问题描述 投票:0回答:1

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

vertex.color中的参数plot()可用于设置网络中所有顶点的顶点颜色,或者它可以接受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")
r igraph colorbrewer
1个回答
1
投票

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

我们希望使用group属性的值从您生成的调色板中选择颜色,但这些值是字符串,而不是数字。获得此功能的一种方法是将字符串转换为因子,然后将其用作数字。这会将每个唯一的字符串值转换为唯一的数值。我们可以用它来选择颜色。

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

Color selected by attribute

© www.soinside.com 2019 - 2024. All rights reserved.