Настройка igraph - PullRequest
       14

Настройка igraph

0 голосов
/ 06 ноября 2018

У меня сформирован неориентированный взвешенный сетевой график, который выглядит следующим образом:

enter image description here

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

Код R для этого выглядит следующим образом:

library(igraph)
setwd('C:/Users/malsa876/Desktop/RTest')
    a <-c(33,6,5,5,6,1,2,1,0,4,2,4,1,2,2,0,0,0,5,0,0,0,2,1,0,0,2,1,0,2,0,0,0,0,0,0,1,0,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
    class(a)
    dim(a) <- c(8,8)
    #l <-layout.reingold.tilford(g) 
    a
    # create igraph object.
    g <- graph.adjacency(a, mode="undirected", weighted=TRUE)
    V(g)$label.cex <- 0.5
    V(g)$name<-c("OD", "ACC", "SI", "T", "RD","SCA", "RU", "CC")
    plot(g,main = 'Network Analysis of Interlinked Dimensions',edge.label=round(E(g)$weight, 3),vertex.label = V(g)$name)
    legend("bottomright", c("OD - Operational Demonstration", "ACC - Accuracy", "SI - Stakeholders Interests",  "T - Time", "RD - Requirements Dependency","SCA - Scalability","RU - Requirements Updates","CC - Computational Complexity"),cex=0.5,title = 'Legend')
    V(g)$label.cex <- 0.5
    V(g)$name<-c("OD", "ACC", "SI", "T", "RD","SCA", "RU", "CC")
    d<-V(g)$label
    E(g)$width <- E(g)$weight + min(E(g)$weight) + 1 # offset=1
    plot(g,main = 'Network Analysis of Parameters',edge.label=round(E(g)$weight, 3),vertex.label = V(g)$name)
    legend("bottomright", c("OD - Operational Demonstration", "ACC - Accuracy", "SI - Stakeholders Interests",  "T - Time", "RD - Requirements Dependency","SCA - Scalability","RU - Requirements Updates","CC - Computational Complexity"),cex=0.5,title = 'Legend')

1 Ответ

0 голосов
/ 06 ноября 2018

Вы можете сделать это, создав собственный макет.

Сначала получите чисто круговую раскладку, которую вы можете использовать:

LO1 = matrix(c(cos((0:7)*2*pi/8), sin((0:7)*2*pi/8)),ncol=2)
plot(g,main = 'Network Analysis of Parameters', layout=LO1)
    edge.label=round(E(g)$weight, 3),vertex.label = V(g)$name)
legend("bottomright", c("OD - Operational Demonstration", 
    "ACC - Accuracy", "SI - Stakeholders Interests",  
    "T - Time", "RD - Requirements Dependency",
    "SCA - Scalability","RU - Requirements Updates",
    "CC - Computational Complexity"),cex=0.5,title = 'Legend', 
    bty="n")

Circular graph

Обратите внимание, что я использовал bty="n", чтобы создать немного больше места для легенды. Но это только оставляет немного места для легенды. Другой способ - оставить дополнительное пространство в макете для легенды в правом нижнем углу. Тогда вы можете сделать шрифт немного больше.

LO2 = matrix(c(cos((0:7)*2*pi/9), sin((0:7)*2*pi/9)),ncol=2)
plot(g,main = 'Network Analysis of Parameters', layout=LO2,
    edge.label=round(E(g)$weight, 3),vertex.label = V(g)$name)
legend("bottomright", c("OD - Operational Demonstration", 
    "ACC - Accuracy", "SI - Stakeholders Interests",  
    "T - Time", "RD - Requirements Dependency",
    "SCA - Scalability","RU - Requirements Updates",
    "CC - Computational Complexity"),cex=0.7,title = 'Legend', 
    bty="n")

Circular graph with an empty space

...