Почему я получаю сообщение об ошибке «Ошибка в y1 - y2: нечисловой аргумент для двоичного оператора» при добавлении фигуры к моему сетевому графику igraph? - PullRequest
0 голосов
/ 11 мая 2018

Редактировать : мне удалось установить только определенные узлы, которые я хотел изменить форму. Однако мне все еще интересно, на что указывает эта ошибка. Решение:

V(net)$shape <- "circle"
V(net)[c(2, 4, 7, 8, 9)]$shape <- "square". 

Проблема: Я пытаюсь построить сеть, но у меня есть проблемы с изменением формы вершины. Я думаю, что это как-то связано с моими данными, но я не знаю, где искать мою ошибку.

Рабочая версия:

Этот код работает нормально. Я создаю фрейм данных с информацией об узлах и вершинах и использую его в функции igraph graph_from_data_frame () для создания структуры данных для построения графика. Я создаю матрицу, которая содержит координаты x и y моих вершин, и затем строю свою сеть. На графике вершины расположены правильно в соответствии с «l».

# Get nodes and links
nodes <- getNodes(site = site, datapath = pathdata)
links <- getEdges(site = site, datapath = pathdata)

# Get net
net <- graph_from_data_frame(d=links, vertices=nodes, directed=T) 

# Lay-out and plot
l <- matrix(c(as.numeric(nodes$X), as.numeric(nodes$Y)),ncol=2)
plot(net, layout=l)

Проблема: Однако, если я хочу изменить стандартную форму вершин (окружности) на квадрат, я получаю ошибку, которую не могу разместить.

nodes <- getNodes(site = site, datapath = pathdata)
links <- getEdges(site = site, datapath = pathdata)

net <- graph_from_data_frame(d=links, vertices=nodes, directed=T) 

l <- matrix(c(as.numeric(nodes$X), as.numeric(nodes$Y)),ncol=2)
V(net)$shape <- "square"
plot(net, layout=l)

Я получаю ошибку « Ошибка в y1 - y2: нечисловой аргумент для двоичного оператора ». Я думал, что это может иметь отношение к позициям в матрице "l", но все они числовые:

is.numeric (л) [1] ИСТИНА

Я считаю, что проблема должна быть в остальных данных, может быть? Кто-нибудь знает, куда указывает эта ошибка? Мой фрейм данных с информацией об узлах и вершинах довольно большой, поэтому я не могу разместить их здесь, но все типы выглядят нормально (числовые, то есть числовые и т. Д.). Спасибо!

1 Ответ

0 голосов
/ 12 июля 2019

Я не верю, что ошибка связана с формами.Когда я получаю это, «traceback ()» указывает на что-то в igraph.Arrows, которое вызывается plot.igraph.Дальнейшие исследования показывают, что это происходит, когда два узла находятся слишком близко друг к другу.Идентичные / дублированные - это явно проблема.Но небольшое перемещение вручную одного из узлов не обязательно исправляет ситуацию.У меня, однако, был успех с

plot(myGraph, layout = jitter( myLayoutMatrix) )
...