Если все нормально, если линии изогнуты, я знаю два пути.Сначала я создаю список краев:
Edges <- data.frame(
from = rep(1:5,each=5),
to = rep(1:5,times=5),
thickness = abs(rnorm(25)))
Edges <- subset(Edges,from!=to)
Он содержит узел происхождения в первом столбце, узел назначения во втором и вес в третьем.Вы можете использовать мой pacake qgraph для построения взвешенного графика, используя это.По умолчанию края изогнуты, если между двумя узлами есть несколько ребер:
library("qgraph")
qgraph(Edges,esize=5,gray=TRUE)
Однако этот пакет на самом деле не предназначен для этой цели, и вы не можете изменитькраевые цвета (пока работаем над этим :)).Вы можете сделать все края черными только с помощью небольшого трюка:
qgraph(Edges,esize=5,gray=TRUE,minimum=0,cut=.Machine$double.xmin)
Для большего контроля вы можете использовать пакет igraph.Сначала мы строим график:
library("igraph")
g <- graph.edgelist(as.matrix(Edges[,-3]))
Обратите внимание на преобразование в матрицу и вычитание единицы, потому что первый узел равен 0. Затем мы определяем макет:
l <- layout.fruchterman.reingold(g)
Теперь мы можем изменитьпараметров ребра с помощью функции E()
:
# Define edge widths:
E(g)$width <- Edges$thickness * 5
# Define arrow widths:
E(g)$arrow.width <- Edges$thickness * 5
# Make edges curved:
E(g)$curved <- 0.2
И, наконец, построите график:
plot(g,layout=l)