Установка длины ребра в графическом инструменте
Я ищу способ указать точную длину ребер на графике, чтобы получить соответствующий рисунок. Я пытался сделать это через свойства края:
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
Извините, если этот вопрос обсуждался, но я так и не нашел решения. В любом случае, благодарю Вас.