Добавление легенды в сюжет Edgebundle - PullRequest
0 голосов
/ 04 сентября 2018

Я нашел код для создания графика в R, используя пакет edgebundleR из этого поста , и мне очень нравится результат. Тем не менее, я не могу найти способ добавить легенду к сюжету. Функция Legend в R добавит легенду к исходному графику igraph, но она не будет перенесена после применения функции edgebundle. Я стремлюсь к чему-то похожему на картинку ниже, чтобы указать названия для каждой цветной группы. Есть ли способ добавить легенду к этому сюжету?

Пример Edgebundle с легендой

library(edgebundleR)
library(igraph)
library(data.table)

ID<- c("X1","X2","X4","X5","X6","X1","X2","X3","X4","X6","X2","X3","X4","X6","X1","X3","X4","X6")
Con<- c(1L,2L,4L,5L,6L,1L,2L,3L,4L,6L,2L,3L,4L,6L,1L,3L,4L,6L)
Grp<-c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L)

d <- structure(list(ID, Con, Grp),
               .Names = c("ID", "Con", "Grp"), class = "data.frame",
               row.names = c(NA, -18L))

#add Grp to ID
d$key <- d$ID
d$ID <- paste0(d$Grp,".",d$ID)

# Get vertex relationships
Cons <- unique(d$Con[duplicated(d$Con)])
rel <-  vector("list", length(Cons))
for (i in 1:length(Cons)) {
  rel[[i]] <- as.data.frame(t(combn(subset(d, d$Con ==Cons[i])$ID, 2)))
}

rel <- rbindlist(rel)

# Get the graph
g <- graph.data.frame(rel, directed=F, vertices=d)
clr <- as.factor(V(g)$Grp)
levels(clr) <- c("salmon", "sandybrown", "darkblue","mediumseagreen","cornflowerblue","black")
V(g)$color <- as.character(clr)

# Plot
plot(g, layout = layout.circle, vertex.size=degree(g)*5, vertex.label="NA")
edgebundle( g, padding = 120, fontsize = 10, nodesize = c(5,10) )->eb
eb
...