как отсортировать вершину по степени в igraph layout_in_circle

Когда я визуализирую сеть с помощью igraph:

dt1 <- data.frame(v1=sample(letters[1:10],20,replace=TRUE),
                  v2=sample(letters[1:10],20,replace=TRUE))
g<-graph.data.frame(dt1, directed=F)
plot(g,layout=layout_in_circle)

введите описание изображения здесь

Я хочу построить вершину в порядке убывания степени. Как я могу это сделать? Я использую degree(g) для получения информации о степени. Однако порядок отображаемых узлов соответствует внутреннему порядку в объекте g, то есть номеру индекса. Если вы присвоите имя узлам с помощью V(g)$name <-, имя изменится, но изменится и идентификатор отношения имени.


person pengchy    schedule 12.07.2016    source источник
comment
подсчитываем степень вершин в объекте igraph. Создайте необходимые атрибуты в виде узлов или списка ребер (следует упомянуть в руководстве). Подойдите к методу, чтобы подсчитать, сколько раз узел появляется в списке ребер. Это могло помочь?   -  person Rockbar    schedule 12.07.2016
comment
Привет, @Rockbar, я попытался использовать degree (g), чтобы получить информацию о степени. Но как я могу изменить порядок идентификаторов вершин?   -  person pengchy    schedule 12.07.2016
comment
Если я правильно помню, есть функции as.edge.list. Исходя из этого подхода, я думаю, что алгоритм подсчета   -  person Rockbar    schedule 12.07.2016
comment
Спасибо, Rockbar, я уловил вашу идею, вы хотите получить информацию о степени каждой вершины. Я получил эти данные с помощью функции degree(). Однако как я могу построить график с вершинами, отсортированными по степени? В настоящее время порядок вершин по умолчанию определяется при построении сети.   -  person pengchy    schedule 12.07.2016


Ответы (1)


Прочтите документацию layout_in_circle (т.е. введите help(layout_in_circle) в R); он говорит, что функция имеет аргумент с именем order:

порядок: вершины, которые нужно разместить на круге, в порядке их желаемого размещения. Вершины, которые здесь не указаны, будут размещены в точке (0,0).

Итак, все, что вам нужно сделать, это создать вектор порядка на основе степеней вершин, используя функцию order() в R, а затем передать это аргументу order для создания макета:

> layout <- layout_in_circle(g, order=order(degree(g)))
> plot(g, layout=layout)
person Tamás    schedule 13.07.2016