Graphviz dot 布局类型错误

1 投票
1 回答
817 浏览
提问于 2025-04-18 08:52

我想从根节点(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%%%%%" 

那么就不会出错了

  1. 我该如何在不修改n本身的情况下改变我的代码?
  2. 为什么会出现这种情况?

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()

撰写回答