Изменить оттенок узла в зависимости от атрибутов узла в igraph? - PullRequest
0 голосов
/ 15 декабря 2018

Итак, у меня есть график социальной сети, который я создал в igraph.Он имеет 50 узлов с 80 уникальными соединениями.Каждый узел имеет 1 атрибут: «A», который является случайным числом от 1 до 10. Есть ли способ установить цвет узлов как одно целое (красный), а затем изменить оттенок в зависимости от значения «A»?

V(net)$color=V(net)$A
V(net)$color=gsub(1,"red",V(net)$color) 
V(net)$color=gsub(2,"pink",V(net)$color)

В настоящее время я использую форму этого кода, но в идеале я хочу что-то, чтобы чем больше значение 'A', тем темнее был оттенок красного. Так что, когда V (net) $A == 10, это действительно темно-красный, но когда V (нетто) $ A == 1, он становится почти белым, светло-розовым.Есть ли код для этого без ручного подключения различных оттенков к приведенному выше коду?

1 Ответ

0 голосов
/ 15 декабря 2018

Я не думаю, что есть базовая функция R для генерации оттенков цвета.Очевидно, что есть такие функции и палитры в различных R-пакетах.Но вместо этого мы можем использовать следующее

myShade <- function(i, n = 10) {
  upper <- c(110, 0, 0)
  lower <- c(255, 210, 210)
  shade <- round(lower + (i - 1) * (upper - lower) / (n - 1))
  paste(c("#", sprintf("%02s", as.hexmode(shade))), collapse = "")
}

barplot(table(letters[1:10]), col = sapply(1:10, myShade))

enter image description here

Здесь i - целое число от 1 до 10, а n - общее числооттенков.В целом, однако, вы можете установить, например, n = 1 и i для любого действительного числа из [0,1], что даст вам много оттенков (хотя и не бесконечно много из-за округления в shade).

Тогда upper и lower соответствуют темно-красному и светло-красному соответственно в формате RGB.Изменяя их, вы можете прямо изменить свою палитру.Затем shade выполняет интерполяцию, а последняя строка создает шестнадцатеричный код, например,

myShade(5)
# [1] "#bf7575"

Тогда, я думаю, вы могли бы сделать

V(net)$color <- sapply(V(net)$A, myShade) # or as.numeric(V(net)$A) if V(net)$A is a character
...