【问题标题】:How to add labels to SOME nodes in my network如何为我的网络中的某些节点添加标签
【发布时间】:2019-01-28 03:44:33
【问题描述】:

我正在尝试创建一个双模网络,我想在其中向单模节点添加标签。我的数据看起来像:(见帖子末尾)

我不能用这个名字代替,因为我正在处理的一些数据没有唯一的名字,只有 ID 号。我正在使用 iGraph

我尝试了几种不同的方法,最接近的方法如下:

Test <- read_delim("Test.csv", ";", escape_double = FALSE, 
                   col_names = FALSE, trim_ws = TRUE)


df <- Test %>% select(Mode1, Mode2) 
g <- graph.edgelist(as.matrix(df, directed = F)

g <- set_vertex_attr(g, "name", index = V(g), as.character(Test$Name))

我希望这能让我写作:

plot(g, vertex.label = V(g)$name)

并将名称作为标签出现, 但我在写作时收到一条错误消息:

g <- set_vertex_attr(g, "name", index = V(g), as.character(Test$Name))

说:

In vattrs[[name]][index] <- value :
  number of items to replace is not a multiple of replacement length

数据:

Test <- structure(list(Mode1 = c("1", "1", "1", "2", "2", "2", "2", "3", 
"3", "3"), Mode2 = c("11", "12", "13", "14", "12", "16", "17", 
"18", "29", "11"), Name = c("A", "A", "A", "B", "B", "B", "B", 
"C", "C", "C")), .Names = c("Mode1", "Mode2", "Name"), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -10L), spec = structure(list(
    cols = structure(list(Mode1 = structure(list(), class = c("collector_character", 
    "collector")), Mode2 = structure(list(), class = c("collector_character", 
    "collector")), Name = structure(list(), class = c("collector_character", 
    "collector"))), .Names = c("Mode1", "Mode2", "Name")), default = structure(list(), class = c("collector_guess", 
    "collector"))), .Names = c("cols", "default"), class = "col_spec"))

【问题讨论】:

  • 您现在创建图表的方式,创建了许多断开连接的节点。你的意思是(例如,你的意思是有一个名为 8 和 25 的节点)还是你只想要 edgelist 中提到的节点?此外,您的数字连续从 11 到 18,然后是 29。您的意思是 29 还是 19?您要标记模式 1 还是模式 2?
  • 啊,我现在更改了数据,所以现在我应该更有意义了。我想拥有 Mode1 上的名字
  • 改进。谢谢!

标签: r igraph


【解决方案1】:

我相信这就是你想要的。 set_vertex_attr 每个节点需要一个值。所以我将 name 的所有值初始化为 NA,然后仅将 Mode1 节点更改为正确的名称。

Mode1Nodes = as.numeric(unique(df$Mode1))
Mode1Names = as.character(aggregate(Test$Name, list(Test$Mode1), FUN=head, 1)$x)

g <- set_vertex_attr(g, "name", index = V(g), NA)
g <- set_vertex_attr(g, "name", index = V(g)[Mode1Nodes], value=Mode1Names)
plot(g)

【讨论】:

  • 耶!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多