Использование GraphViz в MATLAB - PullRequest
       21

Использование GraphViz в MATLAB

1 голос
/ 09 октября 2011

Я пытался построить графики на MATLAB, используя GraphViz, используя этот интерфейс GraphViz .

Я получаю эту ошибку:

>> [x,y]=draw_dot(G)
??? Attempted to access node_pos(2); index out of bounds because numel(node_pos)=1.

Error in ==> dot_to_graph at 94
        y(lst_node) = node_pos(2);

Error in ==> draw_dot at 30
[trash, names, x, y] = dot_to_graph(tmpLAYOUT);  % load NEATO layout

Что меня действительно беспокоит, так это то, что раньше он прекрасно работал (на моем старом компьютере).

Есть идеи, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 29 декабря 2011

После отладки нахожу решение.Просто найдите строку 92 в dot_to_graph.m, как написано:

[node_pos] = sscanf(line(pos_pos:length(line)), ' pos  = "%d,%d"')';

Измените% d,% d на% f,% f.Потому что в файле точек есть числа с плавающей точкой.

1 голос
/ 10 октября 2011

Трудно ответить полностью, поскольку вы не даете нам G, который используете, поэтому мы не можем воспроизвести вашу проблему напрямую;Я попытаюсь ответить так или иначе «на сухом»:

Полученные сообщения об ошибках означают, что временные файлы DOT, созданные neato в draw_dot не может быть прочитано должным образом;строка в файле точек, которая анализируется dot_to_graph с использованием строки формата pos = "%d,%d", должна содержать два числа, например pos ="42,3", но sscanf MATLAB читает только одно число из этой строки.

Возможно ли, что ваш новый компьютер использует другую настройку языка, то есть использует десятичную запятую вместо десятичной точки?Это может привести к тому, что Matlab прочитает два числа как одно, не зная, как sscanf адаптируется к локальным настройкам десятичной точки.

В противном случае, вы все еще используете ту же версию neatoкак прежде?Может ли быть так, что формат его вывода каким-то образом изменился?

Лучший способ выяснить это - установить точку останова отладки в ошибочной строке 94 ([node_pos] = sscanf(line(pos_pos:length(line)), ' pos = "%d,%d"')';) и проверить, что оценивает line(pos_pos:length(line))к.

...