Раскраска узлов графика по разным масштабам - PullRequest
0 голосов
/ 24 апреля 2018

Я хочу построить различные наборы данных в качестве объектов igraph. Они могут выглядеть следующим образом:

library(igraph)
m<-matrix(data = c("a1_ghj",    "a1_phj",
                   "b2_ghj",    "c1_pht",
                   "c1_ght",    "a1_ghi",
                   "g5_pht",    "d2_phj",
                   "r5_phj",    "u6_pht"), ncol = 2)
))

g<-graph_from_edgelist(m)
g

Цвет их узлов должен быть задан разными масштабами, например, они следующие:

aa  qwr asd rty fgh vbn iop ert
ghj 1.8 -0.5    0.2 0.62    0.74    0.3 1.6
ght 2.5 -1  4.1 0.29    0.91    0.9 2
pht -3.5    3   -3.1    -0.9    0.62    -0.6    -9.2
phj -3.5    3   -1.8    -0.74   0.62    -0.7    -8.2
ghi 2.8 -2.5    4.4 1.19    0.88    0.5 3.7

В имени узлов после _ отображается имя группы, членом которой является узел. В таблице шкал столбцы отображают тип шкалы, а строки иллюстрируют названия групп. Для построения этих графиков мне нужна функция для нормализации этих масштабов между -1 и 1, затем указывается цвет для узлов относительно значений выбранного типа масштаба в таблице. Кто-нибудь поможет мне в этом вопросе?

1 Ответ

0 голосов
/ 24 апреля 2018

Прежде всего, как в В предыдущем вопросе вы можете использовать sub в именах вершин, чтобы получить суффиксы.

Suffixes = factor(sub(".*_", "", names(V(g))))

Таким образом, возникает вопрос, как использовать разные шкалы для выбора цветов для узлов.Вы просили масштабировать от -1 до 1, но на самом деле я масштабировал от 0 до 1, потому что это тип аргумента, ожидаемый функцией, производимой colorRamp.

Ваши данные масштабирования

RawScales = read.table(text="aa  qwr asd rty fgh vbn iop ert
ghj 1.8  -0.5    0.2   0.62    0.74    0.3     1.6
ght 2.5    -1    4.1   0.29    0.91    0.9       2
pht -3.5    3   -3.1   -0.9    0.62    -0.6   -9.2
phj -3.5    3   -1.8   -0.74   0.62    -0.7   -8.2
ghi 2.8  -2.5    4.4    1.19    0.88    0.5    3.7",
header=TRUE)

Я буду использовать обе шкалы qwr и rty в качестве примеров.

Шкала от 0 до 1.

qwr_Scaled = (RawScales$qwr - min(RawScales$qwr)) / 
    (max(RawScales$qwr) - min(RawScales$qwr)) 

rty_Scaled = (RawScales$rty - min(RawScales$rty)) / 
    (max(RawScales$rty) - min(RawScales$rty)) 

Настройка функции для создания цветовых шкал.Примечание: оранжевый - это минимальное значение, красный - максимальное значение.

Color = colorRamp(c("orange", "yellow", "white",  "pink", "red"))

Используйте функцию для создания вектора цветов для узлов.

ColVals_qwr = rgb(Color(qwr_Scaled), maxColorValue=255)
names(ColVals_qwr) = RawScales$aa

ColVals_rty = rgb(Color(rty_Scaled), maxColorValue=255)
names(ColVals_rty) = RawScales$aa

Теперь строим график с использованием цветанапольные весы.Я добавил явное расположение узлов, чтобы эти два графика были сопоставимы.

par(mfrow=c(1,2), mar=c(5, 1,3,1))
LO = layout_with_fr(g)
plot(g, vertex.color=ColVals_qwr[Suffixes], frame=TRUE)
plot(g, vertex.color=ColVals_rty[Suffixes], frame=TRUE)

Two scalings

...