Вы можете получить довольно хорошее приближение к вашему графику, используя пакет 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)
![Network plot](https://i.stack.imgur.com/vHMjC.png)