根据属性更改边缘颜色
Posted
技术标签:
【中文标题】根据属性更改边缘颜色【英文标题】:Changing edge color based on attribute 【发布时间】:2022-01-13 10:13:40 【问题描述】:我正在使用 igraph
包在 R 软件上对网络进行可视化表示。
我有一个数据集,其中包含所有节点之间的链接,并且对于每个链接/边,它们被分配到的区域。
因此,我想根据分配到的每个区域更改每个边缘的边缘颜色。上表显示了表的结构。
nodei | nodej | depot1 | depot2 |
---|---|---|---|
4 | 5 | 1 | 0 |
在这种情况下,链接 (4-5) 分配给 depot1,因此边缘的边缘颜色应为绿色,例如。
【问题讨论】:
请分享一个可重现的示例/数据。 【参考方案1】:这是一个示例,与 1
关联的边将被着色为“红色”,否则为“绿色”:
g <- make_ring(5)
g %>%
set_edge_attr(
name = "color",
value = c("green", "red")[1 + (rowSums(ends(., E(.)) == "1") > 0)]
) %>%
plot()
在您的情况下,您可以将 "1"
替换为 "depot1"
并试一试。
【讨论】:
谢谢!这很有帮助。【参考方案2】:我试图理解你的问题,我创建了一个node type
来为边缘和节点着色。
library(igraph)
data <- read.table(text = "
N D type
1 6 A
3 7 B
7 8 A
4 5 B
7 10 A
4 6 B
1 7 A
6 8 B
7 9 B
6 10 A ", header=T )
nodes <- data.frame(id=unique(c(data$N, data$D)) )
nodes$type <- c("A","B") # this if for the layout
nodes$x <- c(1,3,7,4,7, 4, 1,6,7,6)
nodes$y <- c(6,7,8,5,10,,5, 7,8,9,10)
nodes
G <- graph_from_data_frame(dd, vertices = nodes )
V(G)$color <- ifelse( V(G)$type == "A", "red", "green")
E(G)$color <- ifelse( E(G)$type == "A", "red","green")
edge_attr(G)
vertex_attr(G)
plot(G)
【讨论】:
以上是关于根据属性更改边缘颜色的主要内容,如果未能解决你的问题,请参考以下文章