更改特定边 igraph R 的顶点节点颜色
Change Vertex Node colour for specific edge igraph R
我正在使用无向图。我正在寻找绘制图形,并为满足某些条件的节点着色。
我有一个包含好边和坏边的数据框。好的边缘我设置列color = darkgrey
,坏的边缘color = red
我的边缘列表看起来像:
from to color
1 54770 54771 darkgrey
2 54770 54775 darkgrey
3 54770 54776 darkgrey
4 54770 54774 darkgrey
5 54771 54775 darkgrey
6 54771 54776 darkgrey
7 54771 54774 red
8 54775 54776 darkgrey
9 54775 54774 darkgrey
10 54776 54774 darkgrey
11 110780 110781 red
(为此,我 运行 列 dob_diff
上的以下行):
df$color <- with(df, ifelse(dob_diff <= 168), "red", "darkgrey"))
我可以绘制图形:
g = graph.data.frame(df, directed=FALSE)
plot(graph)
我可以 return 那些坏边的索引列表:
a <- which(df$colour == "red")
> a
[1] 7 11
我如何获取这些边,然后为连接到坏边的那些节点着色?
这道题说明你可以通过编号来访问节点颜色
V(g)$color[6] <- "red"
如何告诉 igraph 获取边列表?
编辑:例如:
我可以return列出那些不正确的节点:
> from <- cluster_data_updated_illegal_combined[c("from")][cluster_data_updated_illegal_combined$illegal_dob == 1,]
> to <- cluster_data_updated_illegal_combined[c("to")][cluster_data_updated_illegal_combined$illegal_dob == 1,]
> from
[1] "54771" "110780" "20285" "83962" "88825" "19695" "33343" "89446" "90175" "98032" "115768"
[12] "1982" "71327" "75017" "75018" "89315" "89316" "106277" "106956" "111140" "32841" "72276"
[23] "111062" "111074" "1904" "12148" "17325" "17412" "18238" "18368" "19681" "28041" "30755"
[34] "31915" "32825" "43791" "54806" "54808" "87075" "94814" "97877" "101124" "102311" "107659"
[45] "108778" "108906" "112029" "120840" "127396" "33371" "90150" "111095" "122230"
> to
[1] "54774" "110781" "20693" "83961" "88565" "20338" "33340" "91043" "90171" "98035" "115771"
[12] "1976" "71439" "75019" "75020" "89929" "89929" "106279" "107489" "111139" "32993" "72272"
[23] "111060" "111071" "2697" "12090" "17323" "17413" "20300" "18561" "20025" "28046" "30744"
[34] "31587" "33113" "44067" "54799" "54803" "87073" "94816" "97872" "101122" "103480" "107679"
[45] "109013" "109256" "112246" "120842" "127401" "32679" "90259" "111028" "122228"
然后我尝试将这些节点的图形着色为红色,但出现错误:
> V(gg)[from]$color<-"red"
Error in unclass(x)[i] : invalid subscript type 'closure'
> V(gg)[to]$color<-"red"
Error in unclass(x)[i] : invalid subscript type 'closure'
你得到了什么:
您的边缘列表如下所示:
df <- read.table(header=T, text=" from to color
1 54770 54771 darkgrey
2 54770 54775 darkgrey
3 54770 54776 darkgrey
4 54770 54774 darkgrey
5 54771 54775 darkgrey
6 54771 54776 darkgrey
7 54771 54774 red
8 54775 54776 darkgrey
9 54775 54774 darkgrey
10 54776 54774 darkgrey
11 110780 110781 red")
这是图表:
library(igraph)
g = graph.data.frame(df, directed=FALSE)
plot(g)
这些是数据框中红色 ("bad") 边的索引:
which(df$color == "red")
# [1] 7 11
您的问题:
How can I take these edges and then colour those nodes which are
connected to the bad edges?
这是给连接到红色边缘的节点着色的一种方法:
vertices <- union(
head_of(g, which(E(g)$color == "red")),
tail_of(g, which(E(g)$color == "red"))
)
plot(g, vertex.color = ifelse(V(g) %in% vertices, 6, 1))
参见例如?head_of
。可能有 other/better 种方式。
Is there another column I can create with a different name that
igraph can use to auto colour the nodes?
您可以将 color
属性分配给顶点 V(g)
以及边 E(g)
:
V(g)$color <- (V(g) %in% vertices) + 1L
plot(g)
我正在使用无向图。我正在寻找绘制图形,并为满足某些条件的节点着色。
我有一个包含好边和坏边的数据框。好的边缘我设置列color = darkgrey
,坏的边缘color = red
我的边缘列表看起来像:
from to color
1 54770 54771 darkgrey
2 54770 54775 darkgrey
3 54770 54776 darkgrey
4 54770 54774 darkgrey
5 54771 54775 darkgrey
6 54771 54776 darkgrey
7 54771 54774 red
8 54775 54776 darkgrey
9 54775 54774 darkgrey
10 54776 54774 darkgrey
11 110780 110781 red
(为此,我 运行 列 dob_diff
上的以下行):
df$color <- with(df, ifelse(dob_diff <= 168), "red", "darkgrey"))
我可以绘制图形:
g = graph.data.frame(df, directed=FALSE)
plot(graph)
我可以 return 那些坏边的索引列表:
a <- which(df$colour == "red")
> a
[1] 7 11
我如何获取这些边,然后为连接到坏边的那些节点着色?
这道题
V(g)$color[6] <- "red"
如何告诉 igraph 获取边列表?
编辑:例如:
我可以return列出那些不正确的节点:
> from <- cluster_data_updated_illegal_combined[c("from")][cluster_data_updated_illegal_combined$illegal_dob == 1,]
> to <- cluster_data_updated_illegal_combined[c("to")][cluster_data_updated_illegal_combined$illegal_dob == 1,]
> from
[1] "54771" "110780" "20285" "83962" "88825" "19695" "33343" "89446" "90175" "98032" "115768"
[12] "1982" "71327" "75017" "75018" "89315" "89316" "106277" "106956" "111140" "32841" "72276"
[23] "111062" "111074" "1904" "12148" "17325" "17412" "18238" "18368" "19681" "28041" "30755"
[34] "31915" "32825" "43791" "54806" "54808" "87075" "94814" "97877" "101124" "102311" "107659"
[45] "108778" "108906" "112029" "120840" "127396" "33371" "90150" "111095" "122230"
> to
[1] "54774" "110781" "20693" "83961" "88565" "20338" "33340" "91043" "90171" "98035" "115771"
[12] "1976" "71439" "75019" "75020" "89929" "89929" "106279" "107489" "111139" "32993" "72272"
[23] "111060" "111071" "2697" "12090" "17323" "17413" "20300" "18561" "20025" "28046" "30744"
[34] "31587" "33113" "44067" "54799" "54803" "87073" "94816" "97872" "101122" "103480" "107679"
[45] "109013" "109256" "112246" "120842" "127401" "32679" "90259" "111028" "122228"
然后我尝试将这些节点的图形着色为红色,但出现错误:
> V(gg)[from]$color<-"red"
Error in unclass(x)[i] : invalid subscript type 'closure'
> V(gg)[to]$color<-"red"
Error in unclass(x)[i] : invalid subscript type 'closure'
你得到了什么:
您的边缘列表如下所示:
df <- read.table(header=T, text=" from to color
1 54770 54771 darkgrey
2 54770 54775 darkgrey
3 54770 54776 darkgrey
4 54770 54774 darkgrey
5 54771 54775 darkgrey
6 54771 54776 darkgrey
7 54771 54774 red
8 54775 54776 darkgrey
9 54775 54774 darkgrey
10 54776 54774 darkgrey
11 110780 110781 red")
这是图表:
library(igraph)
g = graph.data.frame(df, directed=FALSE)
plot(g)
这些是数据框中红色 ("bad") 边的索引:
which(df$color == "red")
# [1] 7 11
您的问题:
How can I take these edges and then colour those nodes which are connected to the bad edges?
这是给连接到红色边缘的节点着色的一种方法:
vertices <- union(
head_of(g, which(E(g)$color == "red")),
tail_of(g, which(E(g)$color == "red"))
)
plot(g, vertex.color = ifelse(V(g) %in% vertices, 6, 1))
参见例如?head_of
。可能有 other/better 种方式。
Is there another column I can create with a different name that igraph can use to auto colour the nodes?
您可以将 color
属性分配给顶点 V(g)
以及边 E(g)
:
V(g)$color <- (V(g) %in% vertices) + 1L
plot(g)