如何从graphviz从layout获取坐标?

2024-07-06 23:22:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在和pygraph合作做一些项目。我完成了this example,效果很好。在

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

gv.layout(gvv,'dot')
gv.render(gvv,'png','europe.png')

提前谢谢!在


Tags: 项目图像图形节点pngexample绘制布局
3条回答

我刚刚找到了一个类似的解决方案,完全符合我的需要

pos = nx.drawing.nx_agraph.graphviz_layout(G, prog='dot', args='-Grankdir=LR')

干杯!在

Networkx可以执行以下操作:

import networkx as nx

def setup_europe():
    G = nx.Graph()

    G.add_edge("Portugal", "Spain")
    G.add_edge("Spain","France")
    G.add_edge("France","Belgium")
    G.add_edge("France","Germany")
    G.add_edge("France","Italy")
    G.add_edge("Belgium","Netherlands")
    G.add_edge("Germany","Belgium")
    G.add_edge("Germany","Netherlands")
    G.add_edge("England","Wales")
    G.add_edge("England","Scotland")
    G.add_edge("Scotland","Wales")
    G.add_edge("Switzerland","Austria")
    G.add_edge("Switzerland","Germany")
    G.add_edge("Switzerland","France")
    G.add_edge("Switzerland","Italy")
    G.add_edge("Austria","Germany")
    G.add_edge("Austria","Italy")
    G.add_edge("Austria","Czech Republic")
    G.add_edge("Austria","Slovakia")
    G.add_edge("Austria","Hungary")
    G.add_edge("Denmark","Germany")
    G.add_edge("Poland","Czech Republic")
    G.add_edge("Poland","Slovakia")
    G.add_edge("Poland","Germany")
    G.add_edge("Czech Republic","Slovakia")
    G.add_edge("Czech Republic","Germany")
    G.add_edge("Slovakia","Hungary")
    return G

G = setup_europe()

写一个点文件:

^{pr2}$

计算节点的位置:

pos = nx.pygraphviz_layout(G, prog = 'dot')
print(pos)
# {'Netherlands': (713.86, 167.0), 'Italy': (473.86, 389.0), 'Czech Republic': (100.86, 241.0), 'Portugal': (879.86, 315.0), 'England': (1024.9, 241.0), 'Denmark': (568.86, 167.0), 'Poland': (100.86, 167.0), 'Scotland': (1024.9, 389.0), 'France': (571.86, 315.0), 'Belgium': (713.86, 19.0), 'Austria': (320.86, 167.0), 'Slovakia': (156.86, 315.0), 'Wales': (990.86, 315.0), 'Switzerland': (473.86, 241.0), 'Hungary': (294.86, 241.0), 'Germany': (465.86, 93.0), 'Spain': (879.86, 241.0)}

呈现png:

agraph = nx.to_agraph(G)
agraph.draw("/tmp/europe.png", format = 'png', prog = 'dot')

enter image description here

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

gv.render(gvv)

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

^{pr2}$

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

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

从图像单位到图像的细节都可以解释。在

希望这就是你要找的。在

相关问题 更多 >