2011-10-09 95 views
1

我试图使用GraphViz在MATLAB上绘制图形,使用GraphViz interface在MATLAB中使用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 

请告诉我真的窃听我的是它之前伟大的工作(我的旧电脑)。

任何想法如何解决这个问题?

回答

1

调试完成后,我找到了解决方案。 只要找到线92 dot_to_graph.m,书面:

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

更改%d,%d到%F,%F。因为点文件中有浮点数。

+0

此问题已报告02/03/2010,但似乎代码未更新。 http://www.mathworks.com/matlabcentral/fileexchange/4518-matlab-graphviz-interface – tashuhka

1

由于您没有给我们提供您正在使用的G,所以这很难完全回答,因此我们无法直接重现您的问题;我试图回答“干”:

您收到的错误消息意味着neatodraw_dot创建的临时DOT文件无法正确读取;点文件中由dot_to_graph使用格式字符串pos = "%d,%d"解析的行预计包含两个数字,例如pos ="42,3",但MATLAB的sscanf仅从该行读取一个数字。

您的新计算机是否可能使用不同的语言设置,即使用小数点逗号而不是小数点?这可能导致Matlab读取这两个数字为一个,不知道如何sscanf适应本地小数点设置。

否则,你还像以前一样使用neato的版本吗?它的输出格式是否会以某种方式发生变化?

找出最好的方法可能是在违规行94([node_pos] = sscanf(line(pos_pos:length(line)), ' pos = "%d,%d"')';)中设置一个调试中断点,并检查line(pos_pos:length(line))的计算结果。