Установка длины ребра в графическом инструменте

Я ищу способ указать точную длину ребер на графике, чтобы получить соответствующий рисунок. Я пытался сделать это через свойства края:

import numpy as np
import graph_tool.all as gt

tree = gt.Graph()
# ddmatrix is a symmetric adjacency matrix
eprop = tree.new_edge_property("string")
for i in range(ddmatrix.shape[0]):
    for j in range(i):
        if ddmatrix[j, i] != 0:
            e = tree.add_edge(i, j)
            eprop[e] = ddmatrix[j, i]
tree.edge_properties["weight"] = eprop
gt.graph_draw(tree, pos=gt.radial_tree_layout(tree, 0), ...)

Но мне кажется, что в функции рисования графического инструмента нет аргумента с радиальным макетом дерева, который может указывать длину ребра графического инструмента
Я обнаружил, что вес ребра может влиять на длину ребер в раскладке arf (по крайней мере, мне так показалось...), но он не делает соотношение длин таким же, как при вводе, и создает беспорядок в расположении вершин (с пересекаются края) чаще, чем макет дерева.
Есть ли способ нарисовать графическое изображение с указанными расстояниями между вершинами, которые равны весам ребер? В целом мне интересно и в частности у меня есть случай, когда можно построить желаемый граф (представление дерева с расстояниями между соседними узлами):

[[ 0.    1.25  0.    0.    2.25]
 [ 1.25  0.    1.    1.    0.  ]
 [ 0.    1.    0.    0.    0.  ]
 [ 0.    1.    0.    0.    0.  ]
 [ 2.25  0.    0.    0.    0.  ]]

И, наконец, мне интересно, как следует переписать этот фрагмент, чтобы получить взвешенный граф с весами ребер в качестве свойства с учетом матрицы смежности (я попробовал рецепт оттуда Создайте взвешенный граф из матрицы смежности, но он не сохраняет веса ребер в моем дело):

eprop = tree.new_edge_property("double") 
tree.add_edge_list(np.transpose(ddmatrix.nonzero()), eprop)
tree.edge_properties["weight"] = eprop

Извините, если этот вопрос обсуждался, но я так и не нашел решения. В любом случае, благодарю Вас.

0 ответов

Другие вопросы по тегам