2014-06-06 2 views
1

Je veux produire un arbre de la racine (n) à son enfant 2,3:dot Graphviz erreur type de mise en page

import networkx as nx 
import matplotlib.pyplot as plt 
G = nx.DiGraph() 
n = "%%%%% \n% % % \n%%%%%" 
G.add_edge(n,2) 
G.add_edge(n,3) 
nx.write_dot(G,'test.dot') 
pos=nx.graphviz_layout(G,prog='dot') 
nx.draw(G,pos) 
plt.show() 

Cela donne l'erreur:

TypeError: coercing to Unicode: need string or buffer, NoneType found 

Si je ne importe quelle lettre suppose 'x' dans n avant '%' par exemple

n = "x%%%%% \n% % % \n%%%%%" 

alors je ne comprends pas l'erreur

  1. Comment puis-je changer mon code sans modifier lui-même n?
  2. Pourquoi cela se produit-il?

Répondre

0

Il se peut que graphviz n'autorise pas les ID de noeud à démarrer avec un%?

Voici une solution de contournement:

import networkx as nx 
import matplotlib.pyplot as plt 
G = nx.DiGraph() 
n = "%%%%% \n% % % \n%%%%%" 
G.add_node(1,label=n) 
G.add_node(2,label=2) 
G.add_node(3,label=3) 
G.add_edge(1,2) 
G.add_edge(1,3) 
print G.edges() 
nx.write_dot(G,'test.dot') 
pos=nx.graphviz_layout(G,prog='dot') 
nx.draw(G,pos) 
labels = nx.get_node_attributes(G,"label") 
nx.draw_networkx_labels(G,pos,labels=labels) 
plt.show() 
Questions connexes