2011-10-09 5 views
1

J'ai essayé de tracer des graphes sur MATLAB en utilisant GraphViz, en utilisant ce GraphViz interface.Utilisation de GraphViz dans MATLAB

Je continue à obtenir cette erreur:

>> [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 

Ce qui est vraiment me casser les pieds est qu'il fonctionnait très bien avant (sur mon ancien ordinateur).

Une idée de comment résoudre ce problème?

Répondre

1

Après le débogage, je trouve la solution. Il suffit de trouver la ligne 92 dans dot_to_graph.m, comme il est écrit:

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

Changez le% d,% d% f,% f. Parce qu'il y a des nombres flottants dans le fichier de points.

+0

Ce problème a été signalé le 02/03/2010, mais il semble que le code ne soit pas mis à jour. http://www.mathworks.com/matlabcentral/fileexchange/4518-matlab-graphviz-interface – tashuhka

1

Il est difficile de répondre complètement puisque vous ne nous donnez pas le G que vous utilisez, donc nous ne pouvons pas reproduire votre problème directement; Les messages d'erreur que vous obtenez signifient que les fichiers DOT temporaires créés par neato dans draw_dot ne peuvent pas être lus correctement; une ligne dans le fichier point qui est analysée par dot_to_graph en utilisant la chaîne de format pos = "%d,%d" devrait contenir deux nombres, par exemple pos ="42,3", mais sscanf de MATLAB lit seulement un nombre de cette ligne.

Est-il possible que votre nouvel ordinateur utilise un paramètre de langue différent, c'est-à-dire qu'il utilise une virgule décimale au lieu d'un point décimal? Cette pourrait Matlab pour lire les deux nombres en tant qu'un, pas sûr comment sscanf s'adapte aux paramètres décimaux locaux.

Sinon, utilisez-vous toujours la même version de neato qu'avant? Se pourrait-il que son format de sortie ait changé d'une manière ou d'une autre? La meilleure façon de savoir peut être de définir un point d'arrêt de débogage dans la ligne fautive 94 ([node_pos] = sscanf(line(pos_pos:length(line)), ' pos = "%d,%d"')';) et de vérifier ce à quoi line(pos_pos:length(line)) évalue.