在Jupyter Python中使用Graphviz设置节点位置
我想创建一个具有随机节点位置的图,但节点的“pos”属性似乎没有任何作用。下面是一个简单的例子:在Jupyter Python中使用Graphviz设置节点位置,python,position,nodes,jupyter,graphviz,Python,Position,Nodes,Jupyter,Graphviz,我想创建一个具有随机节点位置的图,但节点的“pos”属性似乎没有任何作用。下面是一个简单的例子: import graphviz import pylab from graphviz import Digraph g = Digraph('G', filename='ex.gv',format='pdf') g.attr(size='7') g.node('1',pos='1,2') g.node('2',pos='2,3') g.node('3',pos='0,0') g.edge('1',
import graphviz
import pylab
from graphviz import Digraph
g = Digraph('G', filename='ex.gv',format='pdf')
g.attr(size='7')
g.node('1',pos='1,2')
g.node('2',pos='2,3')
g.node('3',pos='0,0')
g.edge('1','2')
g.edge('1','3')
graphviz.Source(g)
有没有办法实现这一目标?
提前感谢。虽然文档中没有100%的清晰,但我认为点引擎在输入时不支持pos。fdp或neato引擎支持pos on输入以设置初始位置,如果您以“!”结束坐标规范,坐标不会改变,因此将成为最终节点位置 在上玩一个活生生的例子 此独立python脚本生成具有预期节点位置的pdf:
#!/usr/bin/python
import graphviz
from graphviz import Digraph
g = Digraph('G', engine="neato", filename='ex.gv',format='pdf')
g.attr(size='7')
g.node('1',pos='1,2!')
g.node('2',pos='2,3!')
g.node('3',pos='0,0!')
g.edge('1','2')
g.edge('1','3')
g.render()
由于SO不支持pdf上传,因此以下是使用相同代码生成的png图像,但format='png'除外:
如果没有感叹号,您将获得:
如果没有任何pos属性,您将得到类似(但不完全相同)的结果:
不幸的是,fdp或neato引擎似乎在没有pos属性的情况下输出相同的结果,可能是因为您没有在坐标规格的末尾添加感叹号?看见我已经更新了我的答案,以明确您的情况需要这样做。在python中,“!”并没有起到作用,在您的实例中,虽然我已经用可用的python代码更新了答案,但它仍然有效。我不确定你的代码中的
graphviz.Source(g)
是做什么的,但它至少没有为我生成任何图形。这可能是您的问题,也可能是您正在使用的Jupyter环境。也许是一个古老的Graphviz版本?