根据属性更改边缘颜色

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)

【讨论】:

以上是关于根据属性更改边缘颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何获得触发器以根据 DataContext 属性更改 TextBlock 的颜色?

根据href属性更改链接颜色

如何根据部分更改分隔符的颜色

如何根据结果更改文本标签颜色?

更改 NumberPicker 的文本颜色

如何根据它是不是是占位符来更改 textarea 文本的颜色?