pydot:是否可以绘制两个具有相同字符串的不同节点?
问题:pydot:是否可以绘制两个具有相同字符串的不同节点? 我正在使用 pydot 在 python 中绘制图形。我想代表一个决策树,比如(a1,a2,a3 是属性,两个类是 0 和 1: a1>3 / \ a2>10 a3>-7 / \ / \ 1 0 1 0 然而,使用 pydot,只创建了两片叶子,树看起来像这样(附有 png): a1>3 / \ a2>10 a3>-7 | X | 1
·
问题:pydot:是否可以绘制两个具有相同字符串的不同节点?
我正在使用 pydot 在 python 中绘制图形。我想代表一个决策树,比如(a1,a2,a3 是属性,两个类是 0 和 1:
a1>3
/ \
a2>10 a3>-7
/ \ / \
1 0 1 0
然而,使用 pydot,只创建了两片叶子,树看起来像这样(附有 png):
a1>3
/ \
a2>10 a3>-7
| X |
1 0
现在,在这个简单的情况下,逻辑很好,但在较大的树中,属于不同分支的内部节点是统一的。
我正在使用的简单代码是:
import pydot
graph = pydot.Dot(graph_type='graph')
edge = pydot.Edge("a_1>3", "a_2>10")
graph.add_edge(edge)
edge = pydot.Edge("a_1>3", "a_3>-7")
graph.add_edge(edge)
edge = pydot.Edge("a_2>10", "1")
graph.add_edge(edge)
edge = pydot.Edge("a_2>10", "0")
graph.add_edge(edge)
edge = pydot.Edge("a_3>-7", "1")
graph.add_edge(edge)
edge = pydot.Edge("a_3>-7", "0")
graph.add_edge(edge)
graph.write_png('simpleTree.png')
我还尝试创建不同的节点对象,而不是创建边并将其添加到图中,但似乎 pydot 检查节点池中是否有相同名称的节点,而不是创建新节点。
有任何想法吗?谢谢!
解答
您的节点总是需要一个唯一的名称,否则您不能唯一地命名它们以在它们之间附加边。但是,您可以给每个节点一个标签,这是渲染时显示的内容。
因此,您需要添加具有唯一 ID 的节点:
graph = pydot.Dot(graph_type='graph')
graph.add_node(pydot.Node('literal_0_0', label='0'))
graph.add_node(pydot.Node('literal_0_1', label='0'))
graph.add_node(pydot.Node('literal_1_0', label='1'))
graph.add_node(pydot.Node('literal_1_1', label='1'))
然后添加连接这些节点的图边:
edge = pydot.Edge("a_2>10", "literal_0_0")
graph.add_edge(edge)
edge = pydot.Edge("a_2>10", "literal_1_0")
graph.add_edge(edge)
edge = pydot.Edge("a_3>-7", "literal_0_1")
graph.add_edge(edge)
edge = pydot.Edge("a_3>-7", "literal_1_1")
graph.add_edge(edge)
连同您定义的其余边,这使得:
更多推荐
已为社区贡献126473条内容
所有评论(0)