首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从graphviz的layout中获取坐标?

如何从graphviz的layout中获取坐标?
EN

Stack Overflow用户
提问于 2012-12-19 01:58:46
回答 7查看 6.6K关注 0票数 8

我一直在用pygraph做一些项目。我完成了this example,它工作得很好。

现在,问题是:图形是以图片格式(gif)绘制的。我需要的是为gif图像上显示的图形布局获取每个节点的实际坐标。我该怎么做呢?我试了又试,但还是找不到解决这个问题的办法。我认为这个问题的解决方法应该是操纵以下两行中的一行:

代码语言:javascript
复制
gv.layout(gvv,'dot')
gv.render(gvv,'png','europe.png')

提前感谢!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-12-20 16:55:35

您可以使用以下命令将布局信息添加到图形中:

代码语言:javascript
复制
gv.render(gvv)

然后找出获取其属性pos的节点的位置:

代码语言:javascript
复制
n_france = gv.findnode(gvv, "France")
pos = gv.getv(n_france, "pos")

然后,根据您想要执行的操作,您可能需要将点坐标转换为png图像坐标。你可以从这里获得有用的信息:

http://www.graphviz.org/faq/#FaqCoordTransformation

它详细地解释了从图形单元到图像像素的计算。

希望这就是你要找的。

票数 7
EN

Stack Overflow用户

发布于 2019-09-12 01:15:57

我刚刚找到了一个类似的解决方案,完美地满足了我的需求。

代码语言:javascript
复制
pos = nx.drawing.nx_agraph.graphviz_layout(G, prog='dot', args='-Grankdir=LR')

干杯!

票数 2
EN

Stack Overflow用户

发布于 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。

代码语言:javascript
复制
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"'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13938770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档