我一直在用pygraph做一些项目。我完成了this example,它工作得很好。
现在,问题是:图形是以图片格式(gif)绘制的。我需要的是为gif图像上显示的图形布局获取每个节点的实际坐标。我该怎么做呢?我试了又试,但还是找不到解决这个问题的办法。我认为这个问题的解决方法应该是操纵以下两行中的一行:
gv.layout(gvv,'dot')
gv.render(gvv,'png','europe.png')提前感谢!
发布于 2012-12-20 16:55:35
您可以使用以下命令将布局信息添加到图形中:
gv.render(gvv)然后找出获取其属性pos的节点的位置:
n_france = gv.findnode(gvv, "France")
pos = gv.getv(n_france, "pos")然后,根据您想要执行的操作,您可能需要将点坐标转换为png图像坐标。你可以从这里获得有用的信息:
http://www.graphviz.org/faq/#FaqCoordTransformation
它详细地解释了从图形单元到图像像素的计算。
希望这就是你要找的。
发布于 2019-09-12 01:15:57
我刚刚找到了一个类似的解决方案,完美地满足了我的需求。
pos = nx.drawing.nx_agraph.graphviz_layout(G, prog='dot', args='-Grankdir=LR')干杯!
发布于 2020-09-23 06:40:35
使用pydotplus,您可以加载和解析一个dot/gv文件,并询问pydotplus生成的数据结构,但是这个内部表示似乎最初并不拥有所有节点属性,比如pos,除非它们已经在文件中。
但是您也可以调用.write_dot()来生成一个更加冗长的点文件版本。如果你解析它,那么得到的数据结构似乎有所有节点的位置(甚至样条的位置)。
注意:也许最好通过名称而不是索引来索引节点,因为在详细文件中任何后面带有方括号的文本都将被解析为节点,因此节点列表可能会有虚假的额外元素。
在下面的(稍微编辑过的)实验中,在Spyder提示符下,我有一个简洁的点文件interior.gv (它没有节点的位置),我先使用.graph_from_dot_file(),然后使用.write_dot()。然后在详细生成的文件上再次使用.graph_from_dot_file(),这样就可以根据需要找到pos。
import pydotplus as pdp
interior = pdp.graphviz.graph_from_dot_file('interior.gv')
interior.write_dot('interior2.dot')
Out[210]: True
interior2 = pdp.graphviz.graph_from_dot_file('interior2.dot')
interior2.get_nodes()[3].get_pos()
Out[214]: '"213.74,130"'https://stackoverflow.com/questions/13938770
复制相似问题