根据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。
在阅读了 edgebundleR
的 PDF-documentation 之后,我想这目前不是软件包功能的一部分,但它也很好...
- 根据
c("a.", "b.")
组包括 grouping-labels
- 更改文本的字体
- 对指向不同组的线条使用不同的颜色
已选择类别(如此 example 输入和输出)
- 向绘图添加标题,该标题在绘图旋转时保持不变
我的问题
- 使用a时是否可以为每组的线条和节点着色
矩阵而不是 igraph-object,优先使用 color-codes
(rgb,hex),如果是,如何?
- 尽管没有包含在基本功能中,但是否有
从上面进行高级格式化的方法? (当然,不必在很大程度上重写或扩展包)
感谢您的建议!
与此同时,我想出了一种方法来改变整个图(包括文本、线条和节点)的颜色。我想在这里分享它,以便为有类似抱负的人节省几个小时的研究时间。
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
收到包含新功能的更新,欢迎您扩展此答案。
现状
在我之前的问题
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
在阅读了 edgebundleR
的 PDF-documentation 之后,我想这目前不是软件包功能的一部分,但它也很好...
- 根据
c("a.", "b.")
组包括 grouping-labels
- 更改文本的字体
- 对指向不同组的线条使用不同的颜色 已选择类别(如此 example 输入和输出)
- 向绘图添加标题,该标题在绘图旋转时保持不变
我的问题
- 使用a时是否可以为每组的线条和节点着色 矩阵而不是 igraph-object,优先使用 color-codes (rgb,hex),如果是,如何?
- 尽管没有包含在基本功能中,但是否有 从上面进行高级格式化的方法? (当然,不必在很大程度上重写或扩展包)
感谢您的建议!
与此同时,我想出了一种方法来改变整个图(包括文本、线条和节点)的颜色。我想在这里分享它,以便为有类似抱负的人节省几个小时的研究时间。
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
收到包含新功能的更新,欢迎您扩展此答案。