Как конвертировать файл igraph в строки/столбцы?

#r #igraph

Вопрос:

Я хотел бы передать имеющуюся у меня информацию в обычный список осей с узлами, но я не знаю, как это сделать. Исходные данные с «заместителем» выглядели бы так. Если кто-то знает, как преобразовать этот список во что-то более простое в использовании, я был бы признателен.Я могу визуализировать график с помощью «графика», но для его редактирования мне нужна более точная информация.

 library(igraph)
dput (net2$graph_pajek)
structure(list(30, FALSE, c(1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 
3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 6, 7, 13, 13, 
14, 15, 16, 18, 20, 20, 21, 27, 27, 27, 27, 29, 2, 2, 2, 2, 2, 
2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 
6, 6, 7, 8, 8, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 12, 12, 12, 
13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 18, 18, 18, 19, 20, 20, 
21, 21, 23, 24, 25, 26, 27, 27, 27, 29, 3, 3, 3, 3, 3, 3, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 
5, 5, 5, 5, 6, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 10, 
10, 10, 10, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 
12, 12, 12, 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 15), list(c(1, 0, 1), structure(list(), .Names = character(0)), 
    list(name = c("A", "B", "C", 
    "D", "E", "F", "G", "H", 
    "I", "J", "K", 
    "L", "M", "N", 
    "O", "P", "Q", "R", 
    "S", "T", "U", 
    "V", "W", "X", "Y", "Z", 
    "AB", "AC", "AD", "AE"
    ), deg = c(248, 532, 855, 574, 1761, 261, 229, 216, 554, 
    628, 774, 223, 502, 295, 266, 910, 227, 312, 364, 260, 294, 
    741, 227, 471, 392, 376, 292, 295, 212, 287), size = c(2., 
    6, 9, 6, 20, 
    2, 2, 2, 6, 
    7, 8, 2, 7, 
    3, 3, 10, 2, 
    3, 4, 2, 3., 
    8, 2, 5, 4, 
    4, 3, 3, 2, 
    3), label.cex = c(0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 
    0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 
    0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7
    ), id = c("A", "B", "C", 
    "D", "E", "F", "G", "H", 
    "I", "J", "K", 
    "L", "M", "N", 
    "O", "P", "Q", "R", 
    "S", "T", "U", 
    "V", "W", "X", "Y", "Z", 
    "AB", "AC", "AD", "AE"
    )), list(num = c(4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 3, 3, 3, 
    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 1, 1, 2, 
    2, 1, 1, 1, 1, 2, 2, 1, 4, 4, 4, 4, 1, 7, 7, 7, 7, 7, 7, 
    7, 6, 6, 6, 6, 6, 6, 12, 12, 12, 12, 12, 12, 12, 12, 12, 
    12, 12, 12, 1, 2, 2, 1, 2, 2, 3, 3, 3, 5, 5, 5, 5, 5, 2, 
    2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 1, 2, 
    2, 2, 2, 1, 1, 1, 1, 3, 3, 3, 1, 6, 6, 6, 6, 6, 6, 40, 40, 
    40, 40, 40, 40, 40, 40, 40), weight = c(4, 4, 4, 4, 
    7, 7, 7, 7, 7, 7, 7, 3, 3, 3, 10, 10, 10, 10, 10, 10, 10, 
    10, 10, 10, 3, 3, 3, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 4, 
    4, 4, 4, 1, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 12, 12, 
    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 2, 2, 1, 2, 2, 
    3, 3, 3, 5, 5, 5, 5, 5, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
    3, 3, 3, 1, 3, 3, 3, 1, 2, 2, 2, 2, 1, 1, 1, 1, 3, 3, 3, 
    1, 6, 6, 6, 6, 6, 6, 40, 40, 40, 40, 40, 40, 40, 40, 40, 
    40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 
    40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 
    40, 7, 7, 7, 7, 7, 7, 7, 1, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7, 
    4, 4, 4, 4, 4, 4, 4, 4, 1, 18, 18))), <environment>), class = "igraph")
 

Комментарии:

1. net не могут быть воспроизведены данные в вашем посте. Пожалуйста, проверьте его наличие.

2. Я изменил файл, так как он был слишком большим. Я надеюсь, что это не даст ошибок. Большое спасибо

3. К сожалению, это не работает.

4. Извините, я не знаю, как сделать воспроизводимый пример с помощью igraph. Спасибо

5. Вы можете проверить, соответствует ли мой ответ вашей цели.

Ответ №1:

Вы ищете что-то вроде get.data.frame

 > get.data.frame(net)
   from to     weight
1     A  B 0.63502922
2     B  C 0.79410173
3     C  D 0.90802625
4     D  E 0.09408188
5     E  F 0.16450634
6     F  G 0.75931882
7     G  H 0.30409658
8     H  I 0.23990324
9     I  J 0.84762277
10    A  J 0.88657718
 

данные

Поскольку я не могу воспроизвести пример в вашем посте, я создал фиктивный пример net , как показано ниже

 net <- make_ring(10) %>%
  set_vertex_attr(name = "name", value = LETTERS[1:vcount(.)]) %>%
  set_edge_attr(name = "weight", value = runif(ecount(.)))
 

Комментарии:

1. @rameman Может быть, вам стоит попробовать as_tbl_graph(get.data.frame(net)) с пакетом tidygraph

2. Спасибо, Томас слишком сложен, чтобы использовать igraph для таких романов, как я. Я сделал сеть и барплот со степенями, но после разрыва файла igraph по краям и узлам и сделал еще один. Я ценю вашу работу!

Ответ №2:

Чтобы прояснить пару вещей:

  • Файл igraph-это не график как таковой, а структура графика (например, узлы и ребра).
  • igraph имеет функции для построения графиков, но не существует единого и стандартного способа построения графика — вместо этого для определения визуально идеальных способов их отображения могут использоваться различные алгоритмы, и эти алгоритмы часто полагаются на случайные инициализации.
  • Выходные данные функций построения графика igraph актуальны только с точки зрения логики построения базового графика R, поскольку они не используют промежуточный формат с координатами, обрабатываемыми в понятной для пользователя структуре. Тем не менее, вы можете управлять множеством аспектов того, как они нарисованы — см. ?igraph::igraph.plotting