Как использовать один и тот же диапазон цветовой палитры для нескольких сетей в R - PullRequest
0 голосов
/ 04 ноября 2019

Я хотел бы построить одну и ту же сеть в три момента времени. Каждый раз атрибут узлов, который является непрерывной переменной, развивается, и я хотел бы показать эту эволюцию, изменяя цвета узлов. Границы, напротив, не меняются во времени. Чтобы иметь возможность сравнивать эволюцию атрибутов узлов, мне нужно, чтобы диапазон цветовой палитры был одинаковым в разных сетях, чего мне пока не удается получить.

Вот код для воспроизведенияпростой пример.

library(statnet)
network <- structure(list(mel = list(list(inl = 2L, outl = 1L, atl = list(
    na = FALSE)), list(inl = 4L, outl = 1L, atl = list(na = FALSE)), 
    list(inl = 5L, outl = 1L, atl = list(na = FALSE)), list(inl = 3L, 
        outl = 2L, atl = list(na = FALSE)), list(inl = 4L, outl = 2L, 
        atl = list(na = FALSE)), list(inl = 5L, outl = 2L, atl = list(
        na = FALSE)), list(inl = 5L, outl = 3L, atl = list(na = FALSE))), 
    gal = list(n = 5, mnext = 8L, directed = FALSE, hyper = FALSE, 
        loops = FALSE, multiple = FALSE, bipartite = FALSE), 
    val = list(list(na = FALSE, vertex.names = "A", t1 = 100, 
        t2 = 90, t3 = 85), list(na = FALSE, vertex.names = "B", 
        t1 = 50, t2 = 80, t3 = 83), list(na = FALSE, vertex.names = "C", 
        t1 = 10, t2 = 60, t3 = 62), list(na = FALSE, vertex.names = "D", 
        t1 = 75, t2 = 15, t3 = 20), list(na = FALSE, vertex.names = "E", 
        t1 = 25, t2 = 30, t3 = 35)), iel = list(integer(0), 1L, 
        4L, c(2L, 5L), c(3L, 6L, 7L)), oel = list(3:1, 6:4, 7L, 
        integer(0), integer(0))), class = "network")

Атрибутами моих узлов являются «t1», «t2» и «t3», которые соответствуют атрибуту эволюционирующих узлов в трех периодах. В сети 5 узлов.

Я пытался представить сеть в три периода таким образом, но диапазон цветовой палитры меняется для каждого периода в соответствии с векторами t1, t2 и t3.

Другими словами, я бы хотел, чтобы границы color_palette были следующими: нижняя граница = min (t1, t2, t3) и максимальная граница = max (t1, t2, t3) для трех графиков. В то время как на данный момент диапазон цветовой палитры меняется в каждом периоде, то есть: в периоде 1 нижняя граница = min (t1) и верхняя граница = max (t1);в период 2 нижняя граница = min (t2) и верхняя граница = max (t2), а в период 3 нижняя граница = min (t3) и верхняя граница = max (t3).

library(RColorBrewer)
cols=brewer.pal(4, "Reds")
my_pal <- colorRampPalette(cols)
t1 <- as.factor(get.vertex.attribute(network,"t1"))
t2 <- as.factor(get.vertex.attribute(network,"t2"))
t3 <- as.factor(get.vertex.attribute(network,"t3"))
order1 <- findInterval(t1, sort(t1))
order2 <- findInterval(t2, sort(t2))
order3 <- findInterval(t3, sort(t3))

coordref <- plot(network)

op <- par(mar=c(0,0,0,0))
plot(network, usearrows=FALSE, displaylabels=T, vertex.cex=5,
     vertex.border="black", vertex.col=my_pal(5)[order1], 
     edge.col = "black",
     coord=coordref)
par(op)

op <- par(mar=c(0,0,0,0))
plot(network, usearrows=FALSE, 
     vertex.border="black", displaylabels=T, vertex.cex=5, vertex.col=my_pal(5)[order2], 
     edge.col = "black",
     coord=coordref)
par(op)

op <- par(mar=c(0,0,0,0))
plot(network, usearrows=FALSE, 
     vertex.border="black", displaylabels=T, vertex.cex=5, vertex.col=my_pal(5)[order3], 
     edge.col = "black",
     coord=coordref)
par(op)
...