Цвета сюжета сети не соответствуют легенде - PullRequest
0 голосов
/ 21 января 2019

У меня есть сеть igraph, которую я хочу раскрасить с помощью RColorBrewer.Вершины имеют атрибут «сектор», который я хочу использовать для их окраски.Для этого я определил цветовую палитру на основе секторов:

color.range <- brewer.pal(nlevels(as.factor(V(g)$sector)), name = "Dark2")
V(g)$color  <- color.range[as.factor(V(g)$sector)]

Когда я строю свой график, цвета легенды не соответствуют информации в атрибуте "сектор" моих вершин:

plot.igraph(g,
        vertex.label = ifelse(V(g)$indegree > 5, V(g)$sector, NA),
        vertex.label.family = "Arial",
        vertex.label.color = "black",
        vertex.label.cex = 0.5,
        vertex.frame.color = NA,
        vertex.color = V(g)$color,
        vertex.size = 3,
        layout = layout.fruchterman.reingold,
        edge.arrow.mode = 1,
        edge.arrow.size = 0.2)

legend("topleft",
        legend = levels(as.factor(V(g)$sector)),
        col = levels(as.factor(V(g)$color)),
        pch = 19,
        cex = 0.8,
        title = "",
        bg="transparent",
        bty = "n")

На графике я вижу категории некоторых вершин высокой степени и сравнивая их с легендой, цвета не совпадают: пример графика, где цвета на графике не соответствуют легенде

Мой вопрос: как я могу определить цветовой диапазон, который будет фактически соответствовать моим категориям секторов, ИЛИ как я могу создать легенду, которая правильно представляет цвета.К сожалению, я не знаю, в чём проблема.

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Для меня решение G5W, которое не полностью работает как

levels(as.factor(V(g)$sector))

, вернуло уровни в виде списка строк, которые нельзя преобразовать в числа, поэтому я получил ошибку:

Warning message:
In legend("topleft",legend = levels(as.factor(V(g)$sector)),col = 
color.range[as.numeric(levels(as.factor(V(g)$sector)))],: NAs introduced by coercion

Я добавил еще один as.factor (), и теперь он работает:

col = color.range[as.numeric(as.factor(levels(as.factor(V(g)$sector))))],
0 голосов
/ 23 января 2019

Я думаю, что вы неправильно вычисляете цвета для легенды. Если вместо этого я использую

col = color.range[as.numeric(levels(as.factor(V(g)$sector)))]

цвета в легенде соответствуют отмеченным точкам на графике.

...