2011-10-09 71 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))的計算結果。