Установить цвет вершины 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")))])

Цвет выбирается по атрибуту

Другие вопросы по тегам