Визуализация расстояния между узлами в соответствии с весами - с R - PullRequest
6 голосов
/ 26 февраля 2012

Я пытаюсь нарисовать график, где расстояние между вершинами соответствует весу ребер *, и я обнаружил, что в graphviz есть способ нарисовать такой граф.Есть ли способ сделать это в R с пакетом igraph (особенно с graph.adkacency)?

Спасибо,

Ноам

Ответы [ 2 ]

4 голосов
/ 26 февраля 2012

Это невозможно, так как вам нужно равенство треугольников для каждого треугольника, чтобы иметь возможность построить такой объект. Таким образом, вы можете только приблизить его. Для этого вы можете использовать «встроенные» алгоритмы. Есть несколько в igraph. Я часто использую алгоритм Фрухтермана-Рейнгольда.

Подробнее см.

library("igraph")
?layout.fruchterman.reingold

Edit:

Обратите внимание, что расстояние между узлами будет несколько соответствовать обратному абсолютному весу ребра.

3 голосов
/ 26 февраля 2012

Как упоминал Саша Эпскамп, если ваши данные не являются идеальными, вы не можете нарисовать график, который бы не нарушал некоторые треугольные неравенства. Однако существуют методы, названные Многомерное масштабирование (MDS) , направленные на минимизацию таких нарушений.

Одна реализация в R - это cmdscale из пакета stats. Я бы порекомендовал пример внизу ?cmdscale:

> require(graphics)
> 
> loc <- cmdscale(eurodist)
> x <- loc[,1]
> y <- -loc[,2]
> plot(x, y, type="n", xlab="", ylab="", main="cmdscale(eurodist)")
> text(x, y, rownames(loc), cex=0.8)

Конечно, вы можете строить x и y, используя любые графические пакеты (вы спрашивали о igraph специально).

Наконец, я уверен, что вы найдете множество других реализаций, если будете искать «многомерное масштабирование» или «MDS». Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...