有人知道如何创建这样的图吗?
答案 0 :(得分:3)
使用igraph
包可以很好地逼近图。
下面的代码将边缘设置为data.frame,然后使用graph_from_data_frame
将其变成图形。您可以在此时进行绘图,但是尽管它的内容与图形相同,但看起来却不像图形。因此,有几个步骤可以使它看起来像您要求的那样。
C
是边缘的曲率。我使它们全部都是直的(曲率= 0),除了节点0和3之间的两个。我不希望它们彼此叠置,因此我给了它们一个小的曲率。
LO
是一种布局,用于按照您执行的相同模式排列节点。
edge.loop.angle
参数的作用是使从0到其自身的循环布局良好。
最后,节点的默认颜色为橙黄色,因此我将其更改为白色(如您的图片一样)。
library(igraph)
from = c(0,0,0,0,1,2,3)
to = c(0,1,2,3,2,3,0)
weight = c(0.1,0.2,0.3,0.4, 1,1,1)
Edges = data.frame(from,to,weight)
g = graph_from_data_frame(Edges)
C = rep(0,7)
C[c(4,7)] = 0.15
LO = matrix(c(0,1,0,1,1,1,0,0), ncol=2)
plot(g, edge.label=E(g)$weight, layout=LO, edge.loop.angle=-pi/2,
vertex.color="white", edge.curved=C)