Как получить координаты графа, нарисованного по определенному алгоритму компоновки в графе-инструменте?

Я хочу сделать пример, показанный здесь. Он отлично работает на моей машине. Проблема в том, что я не могу получить координаты узлов в виде массива, который хранится где-то в переменной pos. Как мне это сделать?

Заранее спасибо за ваш ответ!

1 ответ

Решение

Я воткнул import pdb; pdb.Pdb().set_trace() сразу после назначения строки posи ткнул в pos, Это graph_tool.PropertyMap содержащий атрибуты вершины:

(Pdb) pos
<PropertyMap object with key type 'Vertex' and value type 'vector<double>', for Graph 0x2efbf90

Кажется, не существует прямого способа перебора каждой вершины из этого объекта, но мы можем получить график и запросить график для каждой вершины:

(Pdb) pos.get_graph().vertices()
<graph_tool.libgraph_tool_core.VertexIterator object at 0x2f99950>

Это будет перебирать каждую вершину, и мы можем использовать ее как ключ к pos, который является отображением:

(Pdb) pos[pos.get_graph().vertices().next()]
array([-37.40184702,  25.3717068 ])

Или, если вы хотите все из них, вы можете поместить это в пример программы:

for vertex in g.vertices():
    print pos[vertex]

Который напечатает:

array([-37.40184702,  25.3717068 ])
array([-37.5790565 ,  26.77548156])
array([-35.57640651,  24.60125253])
array([-38.90262591,  24.30374   ])
array([-33.72945377,  24.31891936])
array([-32.68247364,  25.85861809])
[...]
Другие вопросы по тегам