Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Jupyter Python中使用Graphviz设置节点位置_Python_Position_Nodes_Jupyter_Graphviz - Fatal编程技术网

在Jupyter Python中使用Graphviz设置节点位置

在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',

我想创建一个具有随机节点位置的图,但节点的“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','2')
g.edge('1','3')
graphviz.Source(g)
有没有办法实现这一目标?
提前感谢。

虽然文档中没有100%的清晰,但我认为点引擎在输入时不支持pos。fdpneato引擎支持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版本?