Graphviz dot 布局类型错误
我想从根节点(n)生成一棵树,直到它的子节点2和3:
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()
这样做会出错:
TypeError: coercing to Unicode: need string or buffer, NoneType found
如果我在n
前面加上任何字母,比如'x'
,例如:
n = "x%%%%% \n% % % \n%%%%%"
那么就不会出错了
- 我该如何在不修改
n
本身的情况下改变我的代码? - 为什么会出现这种情况?
1 个回答
0
可能是因为graphviz不允许节点的ID以%开头。
这里有一个解决办法:
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()