Установить цвет вершины igraph на основе атрибута вершины, используя RColorBrewer
У меня есть сеть в 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")
1 ответ
Опечатка? По крайней мере, в моей версии RColorBrewer это brewer.pal
не brewer_pal
Мы хотим использовать значение group
атрибут для выбора цвета из сгенерированной вами палитры, но эти значения являются строками, а не числами. Один из способов добиться этого - преобразовать строки в факторы, а затем использовать их как числа. Это преобразует каждое уникальное строковое значение в уникальное числовое значение. Мы можем использовать это, чтобы выбрать цвет.
plot(g, vertex.color = pal[as.numeric(as.factor(vertex_attr(g, "group")))])