r - 如何在 R 的 igraph 图中为重复值添加一行?

标签 r dataframe igraph

我有一个包含三列的数据框,想要为其绘制 igraph 绘图。当我通过 igraph 进行可视化时,第一列有重复的值,它会形成两行。但是,我只想成为重复值的一行。

这是可重现的数据:

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")

我运行了这些代码:

m <- as.matrix(sample)
g <- 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")

这就是我得到的 enter image description here

我想要一条从Singkil 到 Aceh Hulu Singkil

最佳答案

igraph::simplify() 对此非常有用。

按如下方式修改 plot() 调用只会绘制一条线,而之前有两条线。

plot(simplify(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")

如果在简化之前向 igraph 对象添加权重向量,边数将聚合在边权重中,您可以在可视化中使用它。下面将导致相关边缘的线条稍粗。

E(g)$weight <- 1
g <- simplify(g, edge.attr.comb = "sum")
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 = E(g)$weight,
     edge.lty = "solid",
     edge.color = "gray",
     vertex.label.cex = 0.7,
     is.rm = TRUE,
     vertex.label.color = "black")

关于r - 如何在 R 的 igraph 图中为重复值添加一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67188441/

相关文章:

r - 缩放颜色渐变并超出限制

python - pandas:将列表转换为 int64index

r - 将向量列表转置为来自 data.frame

igraph 无法通过 pip 安装

r - 是否可以按海拔对路径进行着色?

删除fill.contour图例中的线条

r - 将空条添加到(百分比)条形图(从长数据格式生成)

dataframe - 将Pyspark Dataframe列从数组转换为新列

r - 转移矩阵的马尔可夫图

r - R 中幂律分布的拟合优度检验