繁体   English   中英

如何对 R 中的 igraph plot 中的重复值进行排序?

[英]How to sort duplicated values in igraph plot in R?

有一个igraph plot。 我想手动排序 position 行。 在此处输入图像描述

例如上面的plot, Tamiang线必须在顶部的第二行,而Sigulai -> ERROR -> NA线在plot的底部。 这是数据:

dput(sample)
structure(list(NMSUKU = c("Aceh/ Achin/ Akhir/ Asji/ A-Tse/ Ureung Aceh", 
"Alas", "Aneuk Jamee", "Gayo", "Gayo Lut", "Gayo Luwes", "Gayo Serbe Jadi", 
"Kluet", "Sigulai", "Simeulue", "Simeulue", "Simeulue", "Singkil", 
"Singkil", "Tamiang"), TopLang = c("Aceh/ Acheh/ Achi ", "Alas ", 
"Aceh Jamee ", "Gajo/ Gayo ", "Gajo/ Gayo ", "Gajo/ Gayo ", "Gajo/ Gayo ", 
"Aceh Kluet ", "ERROR  TopCol out of range ", "Long Bano/ Simalur/ Simeuloe/ Simeulue/ Simulul ", 
"Aceh Simeleu Barat ", "Aceh Simeleu Tengah ", "Aceh Hulu Singkil ", 
"Aceh Hulu Singkil ", "Tamiang "), Ethnicity = c("1_Aceh/ Achin/ Akhir/ Asji/ A-Tse/ Ureung Aceh  ", 
"2_Alas  ", "3_Aneuk Jamee  ", "4_Gayo  ", "6_Gayo Luwes  ", 
"5_Gayo Lut  ", "7_Gayo Serbe Jadi  ", "8_Kluet  ", "NA  ", "10_Simeulue  ", 
"10_Simeulue  ", "10_Simeulue  ", "11_Singkil  ", "17_Batak Pakpak Dairi  ", 
"12_Tamiang  ")), row.names = c(NA, -15L), class = "data.frame")

这是代码:

Library(igraph)
m <- as.matrix(replace(sample, sample == "", "NA"))
g <- simplify(graph_from_edgelist(rbind(m[, 1:2], m[, 2:3]), directed = TRUE))
l <- layout_with_sugiyama(g)
plot(g,
  layout = -l$layout[, 2:1],
  edge.arrow.size = 0.1,
  vertex.size = 2.5,
  vertex.color = "grey",
  vertex.label.dist = 1,
  edge.arrow.width = 1.5,
  edge.width = seq(0.5, 0.08),
  edge.lty = "solid",
  edge.color = "gray",
  vertex.label.cex = 0.7,
  is.rm = TRUE,
  vertex.label.color = "black"
)

想要我想得到这样的: 在此处输入图像描述 我认为这是手动创建的。 无论如何,最终的图表应该与此相同,并且也可以订购该项目的 position。

谢谢!

在您的布局生成器中,有一个参数layers ,它采用子网络列表。 如果您按照您想要的顺序手动创建此列表,Sugiyama 将按照此顺序和 plot 指定的网络。

layers = list(c("Tamiang","Tamiang","12_Tamiang"),
              c("Alas","Alas","2_Alas"),
              ....))

然后你用这个层列表调用布局:

l <- layout_with_sugiyama(g, layers=apply(sapply(layers,function(x) V(g)$name %in% x), 1, which))

只有一个小问题:您的节点标识符不是唯一的。 您必须使它们独一无二才能使sapply() function 在此示例中正常工作。

另请查看手册以获取有关此布局的更多信息: https://igraph.org/r/doc/layout_with_sugiyama.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM