如何绘制igraph,使每个顶点都在一个指定的坐标,这类似于足球运动员的位置?

krcsximq  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(114)

我有一个有3列的 Dataframe ,示例如下(纯粹假设):

id <- c("Muller", "Muller", "Ter Stegen", "Musiala", "Musiala", "Musiala", "Pavard")
tid <- c("Davies", "De Ligt", "Muller", "Kimmich", "Pavard", "Lewandowski", "De Ligt")
Passes <- c(14, 5, 1, 10, 23, 4, 1)

Passes <- data.frame(id, tid, Passes)

dput(Passes)

我一直想把它画出来,这样顶点就出现在输出图的特定坐标上。
到目前为止,我的代码如下:

g <- graph.data.frame(Passes, directed = TRUE)
set_edge_attr(g, "weight", value= E(g)$Passes)
coords <- data.frame(id = c("Ter Stegen", "Musiala", "Davies", "Kimmich", 'De Ligt', "Lewandowski", "Muller", "Pavard"),
                     x= c(0.5, 1, 1, 1,  2, 3, 3, 3.5),
                     y= c(1, 1.8, 1.4, 1, 0.6, 1.8, 1.6, 1.2))
plot(g, vertex.size= 2, edge.arrow.size = 0.3,  vertex.label.cex = 0.8, 
     edge.curved=.2, asp = 0, vertex.label.dist=0.7, 
     layout=coords, xlim = c(0, 4), ylim = c(0, 2))

但之后我不断收到错误,如'错误在norm_coords(布局,-1,1,-1,1):'布局'不是矩阵''
有人知道我的代码有什么问题吗,或者可以提出一个更好的方法吗?谢谢!我的实际 Dataframe 有32个唯一的id,总共有252行,我想找到一个有效的方法给予每个唯一的id一个位置。
谢谢艾美

83qze16e

83qze16e1#

尝试

library(tidyverse)
new.coords <- coords %>% arrange(factor(id, levels = V(g))) %>% select(x,y) %>% as.matrix()

plot(g, vertex.size= 2, edge.arrow.size = 0.3,  vertex.label.cex = 0.8, 
     edge.curved=.2, asp = 0, vertex.label.dist=0.7, 
     layout = new.coords)

相关问题