我有一个包含个人及其相互关系的数据框“dfmin”。与此同时,我还有另一个数据框,其中包含这些人的元数据。下面是我的意思的最小代码示例。我希望能够进行简单的plot.igraph()可视化,例如,根据元数据对象“dfmin.attr”中的一些属性为顶点提供不同的颜色
sec <- 1:10
id <- paste("id", sec, sep = "")
dfmin <- data.frame(c("id2", "id3", "id6", rep(NA, 7)),
c("id1", "id7", "id9", "id10", "id4", rep(NA, 5)),
c("id2", "id1", rep(NA, 8)),
c("id6", "id2", rep(NA, 8)),
c("id4", rep(NA, 9)),
c("id7", "id1", "id3", rep(NA, 7)),
c("id2", rep(NA, 9)),
c("id4", "id10", rep(NA, 8)),
c("id4", "id5", "id7", "id2", rep(NA, 6)),
c("id3", rep(NA,9))
)
colnames(dfmin) <- id
dfmin.attr <- data.frame(id = id, coo = c("AUT", "AUT", "AUT", "GER", "FRA", "FRA", "POL", "AUT", "AUT", "USA"),
female = c(1,0,0,0,1,0,1,1,1,0))
我不明白的是,在
graph_from_data_frame(vertices = NULL)
命令中有一个指定顶点信息的选项,在我看来,这是将两个数据帧(网络和元数据)链接在一起的一种方式,这样网络中的个人dfmin
现在已合并到“dfmin.attr”中的元数据信息中。我使用 g <- graph_from_data_frame(na.omit(stack(dfmin)), directed = FALSE, vertices = dfmin.attr)
创建网络对象,并且 dfmin.attr
的属性按照我想要的方式链接到 g。
有没有一种方法可以轻松地绘制网络并指定应根据元数据中的信息对顶点进行着色?假设我想让顶点具有不同的颜色,那么我想要一些类似于 ggplot 中的组、填充或颜色选项的功能。 这在 ggplot 中非常简单,但显然不适用于网络:
plot.igraph(g, vertex.color = female)
行不通。
我已经看到并找到了解决方案,但它们很长,有时在元数据变量中为每个级别指定一种颜色时不可行,例如:
country_colors <- c(AUT = "blue", GER = "red", FRA = "green", POL = "orange", USA = "purple")
如果我要绘制网络并将每个顶点着色为“ coo”原籍国,然后用 plot(g, vertex.color = country_colors[dfmin.attr$coo])
绘图,但这对于大量国家来说是不可行的。
我们将非常感谢您的帮助!