根据matrix-input格式化和弦图

Formatting chord diagram based on matrix-input

现状

在我之前的问题 中,我得到了一个对称矩阵,我想将其转换成这样的格式化和弦图:

library(edgebundleR)

# data
x <- structure(c(1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0), 
               .Dim = c(3L,5L), 
               .Dimnames = list(c("a.X", "a.Y", "b.Z"), c("a.A", "a.B", "a.C", "b.D", "b.E")))
x <- as.matrix(x)
x <- rbind(cbind(diag(nrow(x)), x), cbind(t(x), diag(ncol(x))))
colnames(x) <- rownames(x)

# plot
edgebundle(x)

# plot with basic formatting using the arguments of edgebundle()
edgebundle(x,
           tension=1,
           fontsize = 12,
           cutoff = 0, 
           width = 1000,
           padding = 230,
           nodesize = c(5, 30))

问题

但是,类似于Color edges and vertex in chord diagram using edgebundle I'd like to go a step further and change the colors of the lines and nodes (by default and during mouseover), which is possible when using an igraph-object as shown in and in the documentation

在阅读了 edgebundleRPDF-documentation 之后,我想这目前不是软件包功能的一部分,但它也很好...

我的问题

  1. 使用a时是否可以为每组的线条和节点着色 矩阵而不是 igraph-object,优先使用 color-codes (rgb,hex),如果是,如何?
  2. 尽管没有包含在基本功能中,但是否有 从上面进行高级格式化的方法? (当然,不必在很大程度上重写或扩展包)

感谢您的建议!

与此同时,我想出了一种方法来改变整个图(包括文本、线条和节点)的颜色。我想在这里分享它,以便为有类似抱负的人节省几个小时的研究时间。

1。更改 Chord-Diagram

的颜色

它的工作原理是将矩阵转换为 igraph-object 并通过顶点 V() 函数设置颜色。颜色可以按组设置,每个顶点使用循环设置,或者当只使用一种颜色时作为一个整体设置。

library(igraph)   

# transform into igraph-object
y <- graph_from_adjacency_matrix(as.matrix(x, "adjacency"), mode = "undirected")

# setting colors

# Per group
V(y)[which(substring(colnames(x),0,1) %in% "a")]$color <- "green"
V(y)[which(substring(colnames(x),0,1) %in% "b")]$color <- "red"
edgebundle(y)

# vertex per vertex
V(y)$color <- c("green", "red") 
edgebundle(y)

# as a whole
V(y)$color <- "#a98561" # hex-codes are supported
edgebundle(y)

2。高级格式

毕竟,igraph 带有定义标题的函数 y$main,通过使用 E() 函数 E(y)$color,改变线的颜色,即边缘,改变标签字体 V(y)$label.family 和其他更好格式化的工具(参见:manual)。不幸的是,edgebundleR 包不支持这些东西。它们只是在使用时没有效果。下面,我提供了一个简短的示例来感受这些设置,显示 edgebundle()plot.igraph() 之间的差异。

# settings
y$main <- "Title"
E(y)$color <- "red"
V(y)$label.family <- "Arial"

# see plots
plot.igraph(y)
edgebundle(y)

似乎在不扩展包的情况下,在鼠标悬停期间更改线条(即边缘)的颜色是不可能的。 edgebundle() 的默认设置在标准线时指向蓝色,在鼠标悬停时指向红色。一旦指定,这些值将被替换为相同的颜色。目前没有为标准线和鼠标悬停期间定义不同颜色的选项。

也无法将分组标签添加到 text-groups。

前景

如果有人能够解决这些问题,或者如果 edgebundleR 收到包含新功能的更新,欢迎您扩展此答案。